Я впервые создаю свой проект, используя подход «сначала код», и я никогда не видел, чтобы эта ошибка появлялась, когда я создавал свои проекты с использованием подхода «сначала база данных».
Я знаю, что здесь много этих ошибок, но я проверил их, и мне кажется, что мне нужен кто-то, кто объяснит мне, что не так в моем конкретном примере, чтобы я мог хорошо его понять.
Ошибка
Член указанного типа «Элементы» не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, члены сущностей и свойства навигации сущностей.
Описание: во время выполнения текущего веб-запроса возникло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.NotSupportedException: элемент указанного типа «Элементы» не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, члены сущностей и свойства навигации сущностей.
Что вызывает ошибку
public dynamic List()
{
var categories = db.Categories.OrderByDescending(x => x.CreatedDateTime).Select(x => new
{
ID = x.ID,
Name = x.Name,
RootCategoryName = x.RootCategory.Name,
ItemCount = x.Items.Count() // This line
});
return Json(categories, JsonRequestBehavior.AllowGet);
}
Модель предмета
public class Item
{
public int ID { get; set; }
public int CategoryID { get; set; } // Seems like here I've done everything correctly
public Category Category { get; set; } // Seems like here I've done everything correctly
[Required]
public string Name { get; set; }
public string Info { get; set; }
public bool? IsAccessory { get; set; }
public int? RootItemID { get; set; }
public Item RootItem { get; set; }
}
Модель категории
public class Category
{
public int ID { get; set; }
public int? RootCategoryID { get; set; }
public Category RootCategory { get; set; }
[Required]
public string Name { get; set; }
public string Info { get; set; }
public IQueryable<Item> Items { get; set; } // Here also it seems that I've done relations correctly
public DateTime CreatedDateTime { get; set; }
public DateTime ModifiedDateTime { get; set; }
}
На первый взгляд мне кажется, что невозможно вызвать что-то вроде Category.Items.Count()
или Item.Category.Name
с помощью code-first, но я думаю, что я сделал что-то не так с кодом, потому что это должно быть возможно. Пожалуйста, помогите, что я должен сделать, чтобы заставить это работать?