gpt4 book ai didi

c# - Entity Framework 4 - ObjectContext.Refresh() 应该如何工作?

转载 作者:行者123 更新时间:2023-11-30 13:04:37 25 4
gpt4 key购买 nike

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

当编辑一个实体时,我们实例化一个新的上下文并实例化一个新的 ourClass(classId),它从数据库中加载我们类类型的当前实体。对 ourClass 进行更改并正确调用 SaveChanges 会将值保存到数据库中。返回到调用 View 模型后,我们使用 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);

最佳答案

你必须注意一个上下文刷新一个在自身上下文中的实体,而不是其他上下文,刷新一个实体与其他上下文手动运行没有任何异常并且没有任何改变即使使用 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 中的实体。

关于c# - Entity Framework 4 - ObjectContext.Refresh() 应该如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204189/

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