gpt4 book ai didi

c# - Entity Framework 4 延迟加载实体集

转载 作者:行者123 更新时间:2023-11-30 20:07:42 24 4
gpt4 key购买 nike

我正在使用带有 POCO 对象的 Entity Framework ,并且我已经打开了 LazyLoading。

如果我正在处理与某个对象关联的集合,该集合何时以及在什么情况下完全加载?

如果我调用其中的每一个

Order.OrderItems.Count()
Order.OrderItems.Any(x => x.StatusId = aValue)
Order.OrderItems.All(x => x.StatusId = aValue)

这些中的任何一个都可以保证 OrderItems 集合的完整加载吗?在我们调用的代码中的某些位置

Order.Include(“OrderItems”) 

当查询或

context.LoadProperty(order, “OrderItems”) 

查询后

但我意识到有时这种情况并不总是发生——我想知道这种情况不发生的后果。我觉得我对它有点知识差距

最佳答案

Linq 方法通常不会加载您的数据,直到您 foreach 覆盖它们的结果,或附加 ToListToArray 等。这就是 Linq to Entities 提供程序允许您链接方法并仅在最终结构上构建查询的方式。

如果方法返回 IQueryableIEnumerable,您可以非常确定 Linq 不会在此时加载数据。

但是:

Order.OrderItems.Count()
Order.OrderItems.Any(x => x.StatusId = aValue)
Order.OrderItems.All(x => x.StatusId = aValue)

对于最外层的查询,如果 Linq 必须返回 bool 值或整数,那么它必须立即运行您的查询。但是对于嵌套查询,事情会变得有点复杂,因为在评估外部查询之前不会评估它们。

至于:

Order.Include("OrderItems")

我相信 Include 不会自行解决查询。当您进行另一个查询时,您可以使用它来搭载额外的数据。

一般的 Linq

如果您想了解(大体上)Linq 的工作原理,可以查看这组文章:

http://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx

这将使您了解何时可以延迟 IEnumerable 以及何时必须对其求值。它不会告诉您有关 Linq to Entities 提供程序的所有信息,但会转移大部分知识。

关于c# - Entity Framework 4 延迟加载实体集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8092873/

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