gpt4 book ai didi

c# - 如何让 Entity Framework 5 更新陈旧数据

转载 作者:行者123 更新时间:2023-11-30 19:28:14 24 4
gpt4 key购买 nike

我有一个运行正常的 EF5 WPF/MVVM 解决方案。该项目是一个订单输入系统,但加载订单会加载很多相关项目,因此上下文用于跟踪所有更改,然后将其保存下来,因此上下文是长期存在的。如果用户 A 加载订单但未对其执行任何操作,然后用户 B 加载该订单并更新它,我有一个刷新按钮,旨在让用户 A 更新陈旧数据。不幸的是,我似乎无法让 EF5 忽略缓存。我最初认为这会起作用:

   _trackingContext.GetObjectContext().Refresh(RefreshMode.StoreWins, theOrders);
List<OrderLineItem> line_items = theOrders.SelectMany(x => x.OrderLineItems).ToList();
_trackingContext.GetObjectContext().Refresh(RefreshMode.StoreWins, line_items);

其中 GetObjectContext() 只是一个包装器

public ObjectContext GetObjectContext()
{
return (this as IObjectContextAdapter).ObjectContext;
}

原来这并没有更新数据。所以我想也许我必须更改合并选项,所以我添加了

var set = _trackingContext.GetObjectContext().CreateObjectSet<OrderLineItem>();
set.MergeOption = MergeOption.OverwriteChanges;

我也尝试过它用于订单(并使用 PreserveChanges 选项)但没有任何效果。最终,我只是求助于处理和重新创建上下文,然后重新创建搜索选择,但看起来这应该是矫枉过正。有没有更简单的方法让 EF5 使用数据库中的新数据更新任何陈旧数据?

更新

好的 - 结果证明这是一个测试方法问题。在看到@jure 的回复并实现它,让它看起来 不起作用后,我终于聪明了。我打开了 SQL Profiler。正确的事情在幕后发生,但我没有做正确的事情来更新 View 。一旦我这样做了,我的原始代码就可以工作了。

最佳答案

有一个 Reload DbEntityEntry 类中的方法,因此您可以:

dbContext.Entry(entity).Reload();

但这仅适用于您需要从 Db 刷新的上下文中的一个对象。

关于c# - 如何让 Entity Framework 5 更新陈旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16308761/

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