私はEntityFramework4(自己追跡エンティティを使用)を使用していて、2つのテーブルのマージであるビューにアクセスしています。したがって、ビューの情報を更新するときは、データベースにアクセスするリポジトリにビューのSTEを送信します。
私は次のことをしました:
更新された情報を含むビューを受け取ったら、STE1とSTE2を作成します。STEを作成すると、状態が追加されて作成されます。したがって、ビューのSTEの状態について、状態が変更されていることをどのように知るか、メソッドを使用して2つのSTEの状態を変更しMarkedAsModified
ます。
次に、ビューのSTEに2つのテーブルの情報がどのようにあるか、ビューからの情報を正しいSTEに渡し、STEからの変更をに適用しますobjectContext
。
最後に私はを作りますsaveChanges
。しかし、このステップで私はを受け取りますOptimistic concurrency exception
。これは、STEが状態からに渡さAdded
れるModified
ため、コンテキストが作成と作成の間に何らかの変更があることを検出するためだと思いますが、後で変更済みとしてマークされたSTEでSaveChanges
試行しAcceptChanges
、変更を適用して最後SaveChanges
に、問題は解決しません。
どうすれば問題を解決できますか?ビューとEntityFrameworkv4を操作するためのより良い方法はありますか?
ありがとう。ダイムロック。
編集1:私はまだ問題があります。私のコードは次のとおりです。
コンポーネントmyComponent=new Components(); //これはSTEですmyComponent.Rereference=myView.Reference; ... //その他のプロパティmyComponent.MarkedAsModified(); //これが必要なのは、新しいレジスタを追加するのではなく、情報を更新したいからです。myContext.ApplyChanges( "Components"、myComponent); miContexto.SaveChanges();
saveChangesで、例外が発生します。update、insert、またはdeleteステートメントが予期しない行数(0)に影響しました。エンティティがロードされてから、エンティティが変更または削除された可能性があります。ObjectStateManagerエントリを更新します。
どちらが問題ですか?作成した新しいSTEを変更できませんか?
ありがとう。