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 を呼び出さずに呼び出されました。変更を適切に報告する方法については、Entity Framework のドキュメントを参照してください。ソース = System.Data.Entity StackTrace: System.Data.Objects.EntityEntry.EntityMemberChanged (文字列 entityMemberName、オブジェクト complexObject、文字列 complexObjectMemberName) で System.Data.Objects.EntityEntry.EntityMemberChanged (文字列 entityMemberName) で System.Data.Objects. 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 wrapEntity, EntityEntry existingEntry) at System.Data.Common.Internal.Materialization.Shaper.HandleEntity[TEntity System.Data.Common.Internal.Materialization.Coordinator 1.SimpleEnumerator.MoveNext() の lambda_method(Closure 、 Shaper ) の ](IEntityWrapper wrapEntity、EntityKey entityKey、EntitySet entitySet) 1.ReadNextElement(Shaper shaper) at System.Data.Common.Internal.Materialization.ShaperSystem.Data.Objects.ObjectContext.BatchRefreshEntitiesByKey(RefreshMode refreshMode) の、 辞書2 trackedEntities, EntitySet targetSet, ListSystem.Data.Objects.ObjectContext.RefreshEntities (RefreshMode refreshMode、IEnumerable コレクション) の 1 つの targetKeys、Int32 startFrom) System.Data.Objects.ObjectContext.Refresh (RefreshMode refreshMode、Object entity) の 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 に答える