我的实体框架模型(将 EF 6.1 与 ObjectContext 一起使用(打开了延迟加载,具有各种导航属性。
例如:
// Orders is a navigation property (collection), which, when first iterated,
// loads the collection of Order entities from the DB
var orders = Customer.Orders.ToList();
在我的应用程序中,出于性能原因,我希望能够分离Order
实体并允许对它们进行垃圾回收:
MyContext.Detach(order1);
MyContext.Detach(order2);
MyContext.Detach(order3);
但是,我发现当我只分离子实体的一个子集(即不是全部(时,Customer.Orders
的下一次迭代不起作用——分离的实体不是返回集合的一部分。
在这种情况下,我可以编写什么代码来使 Customer.Orders
导航属性还原并正常工作,强制它重新加载并重新附加所有实体,包括以前分离的实体?
我尝试手动将Customer.Orders.IsLoaded
设置为 false
,但这不起作用 - 实体不会重新加载,并且在 EF 引擎盖下的某个地方IsLoaded
只是被设置回true
.
您可以使用 LoadProperty 方法:
context.LoadProperty(customer, c => c.Orders, MergeOption.OverwriteChanges);
只需使用 AsNoTracking 即可分离实体
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.AsNoTracking()
.ToList();
}
如果您希望实体框架再次跟踪所需的更改,请将其附加到上下文并使用ctx.myDbSet.Include(x=>x.Something(