2011-04-01 33 views
1

在我的ObjectContext的生命周期中,我收到一条消息,告诉我一个新实体已被其他进程添加到数据源(即没有被我的ObjectContext跟踪)。如何在不重新创建的情况下将此实体添加到本地ObjectContext中?EntityFramework长时间运行ObjectContext:如何检测未由ObjectContext跟踪的数据源更改

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

+1

一些为你阅读:为什么长期居住环境不好 - http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling/3653392#3653392和什么是自我跟踪实体的目的 - http://stackoverflow.com/questions/5091974/what-is-the-purpose-of-self-tracking-entities/5092097#5092097。请注意,STE只能在EFv4中使用。 – 2011-04-01 19:02:30

+0

查看我对@DevArt有关STE的回复。 – djskinner 2011-04-05 08:01:26

+0

此外,我长期运行的ObjectContexts是坏的,DbSet.Local属性中的点是什么。对我来说,如果我们要将它直接绑定到可能会延长应用程序生命周期的UI,那么意味着长时间运行的对象上下文是可以的。 http://blogs.msdn.com/b/adonet/archive/2011/02/01/01/using-dbcontext-in-ef-feature-ctp5-part-7-local-data.aspx – djskinner 2011-04-05 08:02:53

回答

1

如果实体在您的代码中可用,请使用Attach方法。
如果此对象在代码中不可用,则解决方案实际上是使用StoreWins RefreshMode为该对象添加到的集合调用Refresh方法。
我建议你也看看Self-Tracking Entities

+0

我也在思考STE,但由于我确实可以在与我的实体相同的层上访问ObjectContext,所以我没有太多意义来使用它。我的理解是,STE通常用于操纵一层上的实体,但将这些更改保留在另一层上。 – djskinner 2011-04-05 07:58:44

+0

@丹尼尔,你是对的,在这种情况下,STE不提供任何额外的好处。 – Devart 2011-04-05 11:06:58

+0

我终于把它与Attach和Refresh结合起来 – djskinner 2011-04-11 10:06:12

0

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

+1

我有点期待这一点,但我如何有效地追踪从对象上下文中分离的实体图? – djskinner 2011-04-01 13:16:12