gpt4 book ai didi

c# - 我应该始终使用导航属性还是使用 .Where 查询?

转载 作者:行者123 更新时间:2023-11-30 21:41:33 24 4
gpt4 key购买 nike

这个问题是哪种方法更好,或者它是否根本无关紧要。所以,假设我有一个像这样的类 Item

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": []
}
]
}

因此,为 Category 模型设置导航属性的唯一问题是,当我请求项目列表时,它还会向我发送此 "Items": [] 。它并没有影响我或任何东西,所以我想知道我是应该使用 Navigation 方法还是 .Where 方法。还是我应该考虑其他方式?

最佳答案

始终使用导航属性。 EF 将能够生成比您更高效的查询(可能,至少)。它还更容易阅读。

就是说。 不要将您的 EF 对象用作数据协定。在最好的情况下,通过序列化程序运行一个序列化程序会执行上述操作,而在常见情况下会导致循环引用异常。

您的契约(Contract)应该单独定义,这样循环引用就不存在了。使用 Select 将集合从 DB 类型转换为您的 API 类型。

关于c# - 我应该始终使用导航属性还是使用 .Where 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43239175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com