1

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

我知道这里有很多这些错误,但我已经检查过了,似乎我需要有人向我解释我的特定示例中有什么问题,以便我很好地理解它。

错误

LINQ to Entities 不支持指定的类型成员“项目”。仅支持初始化程序、实体成员和实体导航属性。

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息: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使用代码优先的东西,但我认为我在代码上做错了,因为它应该是可能的。请帮忙,我该怎么做才能完成这项工作?

4

1 回答 1

4

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

于 2012-09-29T15:53:04.010 回答