EF WPF DataGrid Reload导致InvalidOperationException:为什么?

时间:2013-06-20 08:56:25

标签: wpf entity-framework datagrid poco

我有一个EF 4 POCO DbContext,并在DataGrid (System.Windows.Controls.DataGrid)中显示一个表格。

  1. 我可以SaveChanges存储DataGrid
  2. 中所做的更改
  3. 我可以Reload()让其他用户更新数据(即我使用SQL Management Studio)。
  4. 然后我可以看到其他用户的数据
  5. 但是,如果我尝试做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.Coordinator 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.SimpleEnumerator.MoveNext()          在System.Data.Objects.ObjectContext.BatchRefreshEntitiesByKey(RefreshMode refreshMode,Dictionary 1.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:

1 个答案:

答案 0 :(得分:0)

这似乎是使用代理时遇到的问题。可以通过禁用代理来解决,也可以通过不使用更改跟踪来解决(现在显然是discouraged)。

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

Stack Overflow

Microsoft Connect