我试着用重新加载函数放弃一些更改。我得到了一个InvalidOperationException。我怎么才能阻止这一切?
DbContext.SaveChanges();
//Entity is in Unchanged state
//Make some changes to an entity
//Change state to modified
DbContext.Entry(entity).Reload();InvalidOperationException 调用EntityMemberChanged或EntityComplexMemberChanged时,没有首先调用相同属性名称的更改跟踪器上的EntityMemberChanging或EntityComplexMemberChanging。有关正确报告更改的信息,请参阅实体框架文档。
编辑:
我启用并禁用了ProxyCreationEnabled,LazyLoadingEnabled。
也尝试过不同的方法。所有这些尝试都会引发相同的异常。
var objContext = ((IObjectContextAdapter)context).ObjectContext;
objContext.Refresh(RefreshMode.ClientWins, entry.Entity);entry.OriginalValues.SetValues(entry.GetDatabaseValues());希望我能找到解决办法。不希望将完整的DbContext释放为重新加载所有数据。
发布于 2013-03-25 10:21:21
引用此MSDN线程/ post
“值得注意的是,该错误显示了您是否使用更改跟踪通过代理类或调用已显式更改的实体成员。每当我在创建objectcontext/objectstatemanager的线程外执行实体成员更改和更改时,都会出现错误,无论我是同步还是异步地执行这两个函数,还是使用锁或线程显式休眠。在我看来,这是objectstatemanager的某种”真正错误“,而不是一个简单的解决方法。球在您的领域,MSFT。”
太长时间不能发表评论了。
发布于 2013-03-31 19:32:39
如果代码与您发布的代码一样,对象是从DbContext加载的,然后从同一DbContext重新加载,则不应该显式地将其标记为已修改;对实体进行更改就足以将其标记为已修改的。换言之:
var o = new SimpleObject { Stuff = "One" };
db.SimpleObjects.Add(o);
db.SaveChanges();
o.Stuff = "Two"; // implicitly marks as Modified for you, since it's still Attached
// Unnecessary
//db.Entry(o).State = System.Data.EntityState.Modified;
db.Entry(o).Reload(); // Works for me发布于 2014-11-04 21:33:03
我发现在具有导航属性的代理实体上重新加载失败。
作为一项工作,重置当前值,然后像这样重新加载:
var entry = DbContext.Entry(entity);
entry.CurrentValues.SetValues(entry.OriginalValues);
entry.Reload();https://stackoverflow.com/questions/15569914
复制相似问题