2016-12-16 14 views
1

私はModel Firstアプローチを使用していますが、属性が[NotMapped]のフラグをほとんど持たないMyEntityという抽象クラスが1つあります。すべてのエンティティはMyEntityから継承されます。 ObjectMaterializedイベントハンドラの中で、エンティティがマテリアライズされていることを示すフラグと、自分のアプリケーションに関連するものを設定します。エンティティフレームワーク6 ObjectMaterializedイベントとSaveChangesオーバーライド

私のSaveChanges()オーバーライドの中で、私はbase.SaveChanges()を呼び出し、それらのフラグをリセットします。実際のデータは変更されていませんが、データベースへのエンティティの更新が行われるようです。

私の質問は以下のとおりです。

  1. それらを変更すると、データベースにエンティティの更新を引き起こし、なぜこれらのフラグは、データベースの列にマップされていませんか?

  2. すべてのエンティティによって継承された抽象クラスの代わりに、これらのフラグを部分クラスに配置しようとしました。これらのフラグの変更は依然としてデータベースへのエンティティの更新を引き起こすようです。何故ですか?

  3. また、base.SaveChanges()より前の値をリセットした後も、これらのフラグのプロパティを変更しないで設定しようとしました。これによりデータベースが更新されることはありませんが、アプリケーションが正しく動作しません。このアプローチは、データベースの更新を避けるために基本的にエンティティ/プロパティの状態と関係しています。しかし、それがどんな副作用を引き起こす可能性がありますか

答えて

0

最後に、エンティティ状態をEntityState.Unchangedに変更することでこれを解決しました。それは私のアプリのために働く。しかし、状態を変更する方法についてはまだ1つの問題があります。

状態を変更するには、次の方法が問題を引き起こした:

ObjectStateEntry state = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntry(entity.Entity); 
state.ChangeState(EntityState.Unchanged); 

dbContext.Entry(entity.Entity).State = EntityState.Unchanged; 

私は、次のコードを使用して状態を変更する必要があります

関連する問題