我有一个EF 4
POCO DbContext,并在DataGrid
(System.Windows.Controls.DataGrid)
中显示一个表格。
SaveChanges
存储DataGrid
。Reload()
让其他用户更新数据(即我使用SQL Management Studio
)。但是,如果我尝试做1 然后 2(即在网格中进行更改SaveChanges
,之后另一个用户更改数据,那么我重新加载)我得到一个{ {1}}。
只有在通过网格更改文本时才会发生这种情况,而不是在通过代码更改数据时。
我可以悄悄地吞下异常然后查看更新的数据。但是,如果不了解正在发生的事情,我宁愿不这样做......
发生了什么事?
完整的例外是......
发生了System.InvalidOperationException 的HResult = -2146233079 Message = EntityMemberChanged或EntityComplexMemberChanged在没有首先在具有相同属性名称的同一更改跟踪器上调用EntityMemberChanging或EntityComplexMemberChanging时被调用。有关正确报告更改的信息,请参阅实体框架文档。 来源= System.Data.Entity的 堆栈跟踪: at System.Data.Objects.EntityEntry.EntityMemberChanged(String entityMemberName,Object complexObject,String complexObjectMemberName) at System.Data.Objects.EntityEntry.EntityMemberChanged(String entityMemberName) at System.Data.Objects.ObjectStateEntry.System.Data.Objects.DataClasses.IEntityChangeTracker.EntityMemberChanged(String entityMemberName) 在System.Data.Objects.Internal.SnapshotChangeTrackingStrategy.SetCurrentValue(EntityEntry条目,StateManagerMemberMetadata成员,Int32序数,对象目标,对象值) at System.Data.Objects.Internal.EntityWrapper
InvalidOperationException
1.UpdateCurrentValueRecord(Object value,EntityEntry entry) 在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) 在lambda_method(Closure,Shaper) 在System.Data.Common.Internal.Materialization.Coordinator1.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.SimpleEnumerator.MoveNext() 在System.Data.Objects.ObjectContext.BatchRefreshEntitiesByKey(RefreshMode refreshMode,Dictionary1.ReadNextElement(Shaper shaper) at System.Data.Common.Internal.Materialization.Shaper
1 targetKeys,Int32 startFrom) 在System.Data.Objects.ObjectContext.RefreshEntities(RefreshMode refreshMode,IEnumerable collection) 在System.Data.Objects.ObjectContext.Refresh(RefreshMode refreshMode,Object entity) 在System.Data.Entity.Internal.InternalEntityEntry.Reload() 在System.Data.Entity.Infrastructure.DbEntityEntry.Reload() 在C:\ projects \ MyProject \ Chilli.Model \ ObjectContext_Refresh.cs中的Chilli.Model.ObjectContext.SafeReload(Object o):第19行 InnerException:
答案 0 :(得分:0)
这似乎是使用代理时遇到的问题。可以通过禁用代理来解决,也可以通过不使用更改跟踪来解决(现在显然是discouraged)。
正如我对这个问题的评论中有其他人遇到类似的问题,可以在这里找到: