私のMVCアプリケーションでEntity Framework 4.3にかなり奇妙な問題があります。私はDbContextの周りにUnit Unworkラッパーを使用しています。私のMVCアプリケーションでは、Unityを使用してこのUOWをリポジトリに渡し、リポジトリをコントローラに渡します。 HierarchicalLifetimeManager
でUOWタイプを登録しました。EFが無効なオブジェクトを保持しようとしています
エラーを発生させるエンティティをデータベースに永続化しようとします。データベースがUNIQUE制約違反をスローすると、エンティティはEFのObjectStateManager
の内部に保持されます。だから私はエラーを修正し、新しいエンティティ(エラーなし)を保存する私のアプリケーションに戻るとき、EFは最初と同じエラーで失敗する古いと無効なオブジェクトを再びを追加しようとします。
私はここで何が欠けていますか?私は無効なオブジェクトがEFによって完全に忘れられ、これが自動的に行われるべきだと考えます。しかし、明らかにそうではありません。それらをpersisするために、DbContextにオブジェクトを追加するには
は、次のコマンドは(base
があるDbContext)に呼び出されます:
base.Set<TEntity>().Add(objectToPersist);
し、データベースに変更をコミットするために、私は呼ん:
base.SaveChanges();
これはエラーをスローします。 。
あなたはUoWにHierarchicalLifetimeManagerを使用していると言います。私はあなたが手動またはUnity.Mvc3経由でリクエストごとに子コンテナを作成していると仮定しています。さもなければ、UoWはあらゆる種類の問題を引き起こすシングルトンになります。 –
エラーを投函してください。 –