純粋なPOCOで実装されたEntityFramework4.0モデルがあります(コード生成なし、自己追跡エンティティなし、単純な古いCLRオブジェクトのみ)。
さて、これが私がUPDATEを実行するために私のUIに持っているいくつかのコードです:
[HttpPost]
public ActionResult UpdatePerson(Person person)
{
repository.Attach(person);
unitOfWork.Commit();
}
基本的に、強い型のPersonオブジェクトを受け入れるアクションメソッドがあり、このエンティティを更新する必要があります。
エラーは発生しませんが、DBへの変更も保持されません。:(
作業ユニットの「コミット」中にEntityStateを検査すると、次のようになります。
var entities = ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged);
EntityState.Unchangedでエンティティが表示されます。
それで、それが持続されなかった理由を説明します。私の検索、追加、削除操作は正常に機能しています(正しく持続しています)。しかし、UPDATEは機能していないようです。
オブジェクトの状態を手動で設定する必要があるというスレッドをいくつか見つけました。
ctx.ObjectStateManager.ChangeObjectState(person, EntityState.Modified);
あれは正しいですか?このロジックはどこに置きますか?作業単位の操作として公開しますか?
明らかに問題は、純粋なPOCOを使用しているため(EntityObjectの派生、INotifyPropertyChangingの実装がないため)、変更の追跡がまったくないことです。
しかし、私は今までそれに関する問題を見つけていません。
私は何が間違っているのですか?