【发布时间】:2013-03-22 12:07:08
【问题描述】:
我尝试使用重新加载功能放弃一些更改。我得到一个InvalidOperationException。
我怎样才能防止这种情况发生?
DbContext.SaveChanges();
//Entity is in Unchanged state
//Make some changes to an entity
//Change state to modified
DbContext.Entry(entity).Reload();
InvalidOperationException
在没有先调用 EntityMemberChanging 或 EntityComplexMemberChanging 的情况下调用了 EntityMemberChanged 或 EntityComplexMemberChanged 具有相同属性名称的相同更改跟踪器。有关信息 关于正确报告更改,请参阅实体框架 文档。
编辑:
我已启用和禁用 ProxyCreationEnabled、LazyLoadingEnabled。
也尝试了不同的方法。所有这些尝试都会抛出相同的异常。
var objContext = ((IObjectContextAdapter)context).ObjectContext;
objContext.Refresh(RefreshMode.ClientWins, entry.Entity);
entry.OriginalValues.SetValues(entry.GetDatabaseValues());
希望我能得到解决方案。不想处理完整的 DbContext 以重新加载所有数据。
【问题讨论】:
-
这可能与您的情况无关,但想检查一下。您是否在程序中执行任何类型的多线程/异步?喜欢使用任何 PLINQ 或 4.5 async/await?
-
@tostringtheory 已经在没有任何线程的情况下检查了它。同样的问题。
-
这有线程问题或自我跟踪实体的味道...应用程序类型是什么 - Web、WPF...?
-
您能否包含用于将状态更改为已修改的确切代码?我在很多地方看到了一些关于如何做到这一点的困惑,包括在 SO 上。
标签: c# entity-framework