質問: 私はModel Firstアプローチを使用していますが、属性が[NotMapped]のフラグがほとんどないMyEntityという抽象クラスを1つ持っています。すべてのエンティティはMyEntityから継承されます。 ObjectMaterializedイベントハンドラの中で、エンティティがマテリアライズされていることを示すフラグと、自分のアプリケーションに関連するものを設定します。 私のSaveChanges()オーバーライドの中で、私はbase.SaveChanges()を呼び出し、それらのフラグをリセットします。実際のデータは変更されていませんが、データベースへのエンティティの更新が行われるようです。 私の質問は次のとおりです: 1. これらのフラグはデータベース列にマップされません。なぜそれらを変更するとエンティティがデータベースに更新されましたか? 2. 私は、これらのフラグを、すべてのエンティティによって継承された抽象クラスではなく、部分クラスに配置しようとしました。これらのフラグの変更は依然としてデータベースへのエンティティの更新を引き起こすようです。何故ですか? 3. 私もbase.SaveChanges()の前に値をリセットした後、これらのフラグプロパティを変更しないで設定しようとしました。これによりデータベースが更新されることはありませんが、アプリケーションが正しく動作しません。このアプローチは、データベースの更新を避けるために基本的にエンティティ/プロパティの状態と関係しています。しかし、それがどんな副作用を引き起こす可能性がありますか
回答: 最後に、エンティティの状態をEntityState.Unchangedに変更することでこれを解決しました。それは私のアプリのために働く。しかし、状態を変更する方法についてはまだ1つの問題があります。 状態を変更する以下の方法で問題が発生しました。 ``` dbContext.Entry(entity.Entity).State = EntityState.Unchanged; ``` 私は次のコードを使用して状態を変更する必要があります: ``` ObjectStateEntry state = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntry(entity.Entity); state.ChangeState(EntityState.Unchanged); ```