1

簡単に言えば、関連エンティティのリストを更新しようとしています。複合主キーと追加の制約があります (ある種の序数列は、RowNumber のように一意である必要があります)。ここで、コレクションに対してより複雑な編集を行う場合、たとえば、連続する RowNumbers を持つ 2 つのエンティティを並べ替えるなど、制約に違反するため、各行に更新を発行することはできません (その制約の有効性は今のところ脇に置きましょう。ポイントではありません)。

この場合は簡単だと思いました。エンティティを削除して再作成するだけです。EF は、削除後に同じエンティティが挿入されたことを検出するように見えることを除いて (同じままの主キーに基づいて)、削除 + 挿入を更新に変換します。少なくとも、古いエンティティと新しいエンティティがそれぞれ削除された状態と追加された状態にあることを完全に確認した後、プロファイラーで見ているのはそれです。

通常、それはかなり論理的なことだと思いますが...この動作を変更する方法はありますか? これは本当に起こっていることですか、それとも何か不足していますか?

4

1 に答える 1

1

結局、これが実際に起こっていることであり、最適化として理にかなっていると思い込まざるを得ませんでした。DB モデルを常にサロゲート キーを使用するように変更しました (とにかく EF が最適に機能する方法です)。これにより、削除されたエンティティと挿入されたエンティティがまったく同じものとして識別されなくなります。つまり、削除 + 挿入は更新に置き換えられません。そのような編集ごとに代理キーが増加し続けることを意味するとしても、それはそれほど悪くはないと思います。

于 2013-06-21T09:38:46.880 に答える