实体框架4 - ObjectContext.Refresh()应该如何工作?

时间:2011-11-20 19:48:21

标签: c# entity-framework-4 objectcontext

当我在我的上下文中的实体上使用RefreshMode.StoreWins调用Refresh并且数据库中的值与实体当前持有的值不同时,我的实体应该将当前值更新为数据库的值,即使我的对象entitystate不变?

在编辑实体时,我们实例化一个新的上下文并实例化一个新的ourClass(classId),它从数据库中加载我们类类型的当前实体。更改myClass并正确调用SaveChanges会将值保存到数据库中。在返回到调用viewmodel之后,我们使用RefreshMode.StoreWins在预先存在的上下文上调用Refresh,但是尽管看到使用SSMS正确更新了数据库中的值,但这并没有更新此上下文中实体的值。有什么想法我应该考虑解决这个问题吗?

修改 我们如何做事的简单例子:

var context1 = new Model1();
LoadContext(); //loads all the data from the database and adds them to the context
var context2 = new Model1();
var SelectedObject = context1.Table1.First();
OurObject selectedObjectForEdit = new OurObject(SelectedObject.ObjectId);
context2.Table1.Add(selectedObjectForEdit);
selectedObjectForEdit.Name = "new name";
context2.SaveChanges();
context1.Refresh(RefreshMode.StoreWins, SelectedObject);

1 个答案:

答案 0 :(得分:0)

您必须注意上下文刷新自我上下文中的实体而不是其他上下文,刷新实体并手动运行其他上下文没有任何异常并且没有任何更改甚至与SoreWins一起发生。

var context1 = new Model1();
var context2 = new Model1();
context1.Table1.First().Caption = "a";
var entity = context2.Table1.First();
context1.SaveChanges();
//below code run without exception but any change not affected
context1.Refresh(RefreshMode.StoreWins, entity);

context1强制刷新包含在context2中的实体。