Член указанного типа «Элементы» не поддерживается в LINQ to Entities.

Я впервые создаю свой проект, используя подход «сначала код», и я никогда не видел, чтобы эта ошибка появлялась, когда я создавал свои проекты с использованием подхода «сначала база данных».

Я знаю, что здесь много этих ошибок, но я проверил их, и мне кажется, что мне нужен кто-то, кто объяснит мне, что не так в моем конкретном примере, чтобы я мог хорошо его понять.

Ошибка

Член указанного типа «Элементы» не поддерживается в 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, но я думаю, что я сделал что-то не так с кодом, потому что это должно быть возможно. Пожалуйста, помогите, что я должен сделать, чтобы заставить это работать?


person Stan    schedule 29.09.2012    source источник


Ответы (1)


Category.Items должен быть типа ICollection<Item> вместо IQueryable<Item>

person jeroenh    schedule 29.09.2012