LINQ to Entities不支持指定的类型成员'Items'

时间:2012-09-29 15:48:59

标签: c# asp.net-mvc linq entity-framework linq-to-entities

我第一次使用代码优先方法制作我的项目,当我使用数据库优先方法创建项目时,我从未见过这个错误。

我知道这里有很多这些错误,但是我已经检查了它们,似乎我需要有人向我解释我的具体例子中有什么问题让我理解它。

错误

  

LINQ to不支持指定的类型成员'Items'   实体。仅初始化程序,实体成员和实体导航   支持属性。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.NotSupportedException:指定的类型   LINQ to Entities不支持成员'Items'。只要   初始化器,实体成员和实体导航属性是   支撑。

导致错误的原因

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这样的东西是不可能的,但我认为我做错了代码,因为它应该是可能的。请帮助,我该怎么做才能使这项工作?

1 个答案:

答案 0 :(得分:4)

Category.Items应为ICollection<Item>类型,而不是IQueryable<Item>