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 を呼び出さずに呼び出されました。変更を適切に報告する方法については、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.EntityWrapper
1.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.Shaper
System.Data.Objects.ObjectContext.BatchRefreshEntitiesByKey(RefreshMode refreshMode) の、 辞書2 trackedEntities, EntitySet targetSet, List
System.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: