私は、データベースからエンティティとして取得された質問のリストを含む調査プログラムを作成しています。調査の過程でエンティティのプロパティを編集することはできますが、これらの変更をデータベースに保持したくありません。そのため、質問がに読み込まれた後、質問を切り離し、dbcontext
辞書を介してアクセスします。
回答をデータベースに保存しようとすると、問題が発生します。回答エンティティは(切り離された)質問エンティティに関連しているため、完全に新しい質問エンティティがデータベースに追加されます。追加される回答エンティティにデタッチされたエンティティの適切なIDが含まれているため、これが発生している理由がわかりません(デバッガーで確認した場合)。ただし、変更を保存すると、新しく作成された重複エンティティのIDに更新されます。
この動作を停止する方法はありますか?SaveChanges
または、代わりに、エンティティに変更を加えて、データベースへの回答またはログエントリを書き込むためにコンテキストで呼び出された場合でも、それらをデータベースに保持しないようにする方法はありますか?
ロードしてから質問(アイテム)をデタッチするコードは次のとおりです。
public FixedLengthBlockElementRuntime(FixedLengthBlock block, RuntimeContext context) : base(block, context)
{
this._items = ((FixedLengthBlock)this.Element).ItemBank.Items.OfType<FixedLengthItem>().ToDictionary(x => x.ItemName, x => x);
foreach(FixedLengthItem fixedLengthItem in this._items.Values)
{
this.Context.DetachEntity(fixedLengthItem);
}
}
そして、重複エントリを追加するコードは次のとおりです。
public void SetResponse(Response response)
{
response.Session = this.Session;
this.DbContext.Responses.AddObject(response);
this.DbContext.SaveChanges();
}
変更を保存する時点まで、Responseには適切なItemIdがあることに注意してください。