我试图恢复使用Context.Refresh方法的上下文更改,但它看起来像刷新不是上下文的成员。实体框架4.1 - 刷新不是上下文的成员
我正在使用Microsoft ADO.NET Entity Framework 4.1 RC版本。
有什么想法?
我试图恢复使用Context.Refresh方法的上下文更改,但它看起来像刷新不是上下文的成员。实体框架4.1 - 刷新不是上下文的成员
我正在使用Microsoft ADO.NET Entity Framework 4.1 RC版本。
有什么想法?
您很可能会看到一个DbContext
,它没有Refresh
方法。您可以使用IObjectContextAdapter
界面来获取底层ObjectContext
,并在其上调用Refresh。
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
您也可以使用刷新功能的代理对象...这里是重装所有修改的对象的示例:
var modifiedEntries = context.ChangeTracker.Entries()
.Where(e => e.State == EntityState.Modified);
foreach (var modifiedEntry in modifiedEntries) {
modifiedEntry.Reload();
}
在这个线程发布可能帮助过答案:Refresh entity instance with DbContext
综上所述,虽然,你可能会尝试调用类似以下内容:
dbContext.Entry(someEntityObjectInstance).Reload();
但是,别人注意到这不会刷新导航属性,所以如果您不得不担心刷新导航属性,您也需要重新加载()所有导航属性,或者您需要分离()或Refresh()后投射到IObjectContextAdapter,或者可能只是重新创建您的DbContext。
就我而言,我坦率地决定这是最好的只是重建的背景下,重新找到()实体:
dbContext = new Model.Entities();
someEntityObjectInstance = dbContext.SomeEntityType.Find(someEntityObjectInstanceKey);
目前可以说是没有简单/最好的答案在这里。
荣誉“漂流”,你为我保存了一天。在这个问题上有* LOTS *的答案,你的是迄今为止最好的!它真的太糟糕了,DbContext不直接支持刷新?这似乎是在多层应用程序中需要的一种非常常见的模式。我接近刚刚读取对象,然后复制在看到您的答案之前更改的内容:-) – Joe