0

我有一个EF 4POCO DbContext 并在DataGrid (System.Windows.Controls.DataGrid).

  1. 我可以SaveChanges存储在DataGrid.
  2. 我可以Reload()让另一个用户(即我使用SQL Management Studio)更新数据。
  3. 然后我可以看到其他用户的数据

但是,如果我尝试做 1然后2(即在网格中进行更改SaveChanges,然后另一个用户更改数据然后我重新加载)我得到一个InvalidOperationException.

这仅在通过网格更改文本时发生,而不是在通过代码更改数据时发生。

我可以安静地吞下异常,然后查看更新的数据。但是,如果不了解发生了什么,我宁愿不要这样做...

这是怎么回事?

完全的例外是......

System.InvalidOperationException 发生 HResult=-2146233079 Message=EntityMemberChanged 或 EntityComplexMemberChanged 被调用,而没有首先在具有相同属性名称的相同更改跟踪器上调用 EntityMemberChanging 或 EntityComplexMemberChanging。有关正确报告更改的信息,请参阅实体框架文档。Source=System.Data.Entity StackTrace:在 System.Data.Objects.EntityEntry.EntityMemberChanged(String entityMemberName) 在 System.Data.Objects 的 System.Data.Objects.EntityEntry.EntityMemberChanged(String entityMemberName, Object complexObject, String complexObjectMemberName)。 System.Data.Objects.Internal.SnapshotChangeTrackingStrategy 中的 ObjectStateEntry.System.Data.Objects.DataClasses.IEntityChangeTracker.EntityMemberChanged(String entityMemberName)。1.SetCurrentValue(EntityEntry entry, StateManagerMemberMetadata member, Int32 ordinal, Object target, Object value) at System.Data.Objects.EntityEntry.SetCurrentEntityValue(StateManagerTypeMetadata metadata, Int32 ordinal, Object userObject, Object newValue) at System.Data.Objects.ObjectStateEntryDbUpdatableDataRecord.SetRecordValue(Int32 ordinal, Object value) at System.Data.Objects.EntityEntry.UpdateRecord(Object value, DbUpdatableDataRecord current, UpdateRecordBehavior behavior, Int32 propertyIndex) at System.Data.Objects.Internal.SnapshotChangeTrackingStrategy.UpdateCurrentValueRecord(Object value, EntityEntry entry) at System.Data.Objects.Internal.EntityWrapper1.UpdateCurrentValueRecord(Object value, EntityEntry entry) at System.Data.Common.Internal.Materialization.Shaper.UpdateEntry[TEntity](IEntityWrapper WrappedEntity, EntityEntry existingEntry) 在System.Data.Common.Internal.Materialization.Shaper.HandleEntity[TEntity ](IEntityWrapper WrappedEntity, EntityKey entityKey, EntitySet entitySet) 在 System.Data.Common.Internal.Materialization.Coordinator 的 lambda_method(Closure, Shaper) 1.SimpleEnumerator.MoveNext 1.ReadNextElement(Shaper shaper) at System.Data.Common.Internal.Materialization.Shaper() 在 System.Data.Objects.ObjectContext.BatchRefreshEntitiesByKey(RefreshMode refreshMode , 字典2 trackedEntities, EntitySet targetSet, List1 targetKeys, Int32 startFrom) at System.Data.Objects.ObjectContext.RefreshEntities(RefreshMode refreshMode, IEnumerable collection) at System.Data.Objects.ObjectContext.Refresh(RefreshMode refreshMode, Object entity) at System.Data.Entity.Internal.InternalEntityEntry .Reload() at System.Data.Entity.Infrastructure.DbEntityEntry.Reload() at Chilli.Model.ObjectContext.SafeReload(Object o) in c:\projects\MyProject\Chilli.Model\ObjectContext_Refresh.cs:line 19 InnerException:

4

1 回答 1

0

这似乎是使用代理时遇到的问题。可以通过禁用代理或不使用更改跟踪来解决(这显然是不鼓励的)这样做)。

正如我对这个问题的评论一样,还有其他人遇到类似的问题,可以在这里找到:

堆栈溢出

微软连接

于 2013-06-21T10:56:27.303 回答