0

私は、データベースからエンティティとして取得された質問のリストを含む調査プログラムを作成しています。調査の過程でエンティティのプロパティを編集することはできますが、これらの変更をデータベースに保持したくありません。そのため、質問がに読み込まれた後、質問を切り離し、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があることに注意してください。

4

1 に答える 1

1

質問DbSetのMergeOptionをOverwriteChangesに設定できます。

Context.Questions.MergeOption = MergeOption.OverwriteChanges;

ただし、これが正しく機能するようにするには、質問のクエリを実行する前に、必ず設定する必要があります。

MergeOptionsがどのように機能するかについての詳細を読む

于 2012-08-28T15:38:51.233 に答える