我有一个EF 4
POCO DbContext 并在DataGrid
(System.Windows.Controls.DataGrid)
.
- 我可以
SaveChanges
存储在DataGrid
. - 我可以
Reload()
让另一个用户(即我使用SQL Management Studio
)更新数据。 - 然后我可以看到其他用户的数据
但是,如果我尝试做 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.EntityWrapper
1.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.MoveNext1.ReadNextElement(Shaper shaper) at System.Data.Common.Internal.Materialization.Shaper
() 在 System.Data.Objects.ObjectContext.BatchRefreshEntitiesByKey(RefreshMode refreshMode , 字典2 trackedEntities, EntitySet targetSet, List
1 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: