Entity framework EntityFramework长期运行的ObjectContext:如何检测ObjectContext未跟踪的数据源更改

Entity framework EntityFramework长期运行的ObjectContext:如何检测ObjectContext未跟踪的数据源更改,entity-framework,Entity Framework,在ObjectContext的生命周期中,我收到一条消息,告诉我一个新实体已被其他进程添加到数据源中(即,我的ObjectContext未跟踪)。如何将此实体添加到本地ObjectContext而不重新创建它 我已经看过了ObjectContext.Refresh(),但我不确定这是否是正确的前进方向。不是问题标题中的答案-在EF中长时间运行对象上下文不是一个好主意。理想情况下,OC应尽可能短时间保持活动状态。答案不在问题标题中-长时间运行对象上下文在EF中不是一个好主意。理想情况下,OC应尽可

在ObjectContext的生命周期中,我收到一条消息,告诉我一个新实体已被其他进程添加到数据源中(即,我的ObjectContext未跟踪)。如何将此实体添加到本地ObjectContext而不重新创建它


我已经看过了
ObjectContext.Refresh()
,但我不确定这是否是正确的前进方向。

不是问题标题中的答案-在EF中长时间运行对象上下文不是一个好主意。理想情况下,OC应尽可能短时间保持活动状态。

答案不在问题标题中-长时间运行对象上下文在EF中不是一个好主意。理想情况下,OC应尽可能短时间保持活动状态。

如果代码中有实体,请使用该方法。
如果此对象在您的代码中不可用,解决方案确实是使用StoreWins RefreshMode为添加该对象的集合调用方法。

我建议你也去看一下

如果实体在代码中可用,请使用该方法。
如果此对象在您的代码中不可用,解决方案确实是使用StoreWins RefreshMode为添加该对象的集合调用方法。


我建议你也去看一下

我有点期待这一点,但我如何有效地跟踪从对象上下文分离的实体图?我有点期待这一点,但我如何有效地跟踪从对象上下文分离的实体图?给你一些阅读:为什么长期存在的上下文不好?自我跟踪实体的目的是什么。请注意,STE仅在EFv4中可用。请参阅我对@DevArt关于STE的响应。此外,我认为长时间运行的ObjectContext不好,那么DbSet.Local属性有什么意义呢。对我来说,这意味着如果我们要将一个长时间运行的对象上下文直接绑定到一个UI上,这个UI可能会在应用程序的生命周期中保持不变,那么长时间运行的对象上下文是可以的。是的,在winform或wpf应用程序中,上下文可以存活更长的时间,但它仍然是工作单元。因此,在数据库发生变化而我的本地ObjectContext仍在使用的情况下,我如何更新它以反映数据库中的变化?请阅读:为什么长寿环境不好?自我跟踪实体的目的是什么。请注意,STE仅在EFv4中可用。请参阅我对@DevArt关于STE的响应。此外,我认为长时间运行的ObjectContext不好,那么DbSet.Local属性有什么意义呢。对我来说,这意味着如果我们要将一个长时间运行的对象上下文直接绑定到一个UI上,这个UI可能会在应用程序的生命周期中保持不变,那么长时间运行的对象上下文是可以的。是的,上下文在winform或wpf应用程序中可以存活更长的时间,但它仍然是工作单元。因此,在数据库发生变化而本地ObjectContext仍在使用的情况下,我如何更新它以反映数据库中的变化?我也考虑了STE,但由于我确实可以访问与实体相同层上的ObjectContext,我用它没什么意义。我的理解是,STE通常用于在一层上操作实体,但在另一层上保留这些更改。@Daniel,你是对的,在这种情况下,STE没有提供任何额外的好处。我最终将其与Attach和Refresh结合使用。我也考虑了STE,但由于我确实可以访问实体所在层上的ObjectContext,所以我没有太多的意义使用它。我的理解是,STE通常用于在一层上操作实体,但在另一层上保留这些更改。@Daniel,你是对的,在这种情况下,STE不会提供任何额外的好处。我最终将其与附加和刷新结合使用