这个问题是,哪种方法更好,或者它是否微不足道。所以,比方说我有一个类项
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
和引用的类别
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
问题在于,当用户点击某个类别时,该类别中的所有项目都应该在列表中输出,因此应该对该项目的类别进行输出。
我可以使用像
这样的东西_context.Items.Where(c => c.Category.Id == id);
并删除虚拟成员。 我问这个以及为什么我“想要”删除该成员的原因是因为当我使用WebApi为客户端获取Items表的Json数据时,它会输出如下内容:
{
"Id": 1,
"Name": "String",
"Category": [
{
"Id": 1,
"Name": "CName",
"Items": []
},
{
"Id": 1,
"Name": "CName",
"Items": []
}
]
}
因此,具有类别模型的导航属性的唯一问题是,当我请求项目列表时,它还会向我发送此“项目”:[]。 它不像它影响我或任何东西,所以我想知道我是否应该使用导航方法或.Where方法。或者也许还有其他一些我应该考虑的方式?
答案 0 :(得分:3)
始终使用导航属性。 EF将能够生成比您更有效的查询(可能至少)。它也很多更容易阅读。
那就是说。 不使用您的EF对象作为数据合同。通过序列化程序运行一个将在 best 情况下执行上面的操作,并且在常见情况下会导致循环引用异常。
您的合同应单独定义,以便不存在循环引用。使用Select
将数据库类型的集合转换为API类型。