こんにちは、EF 4 セルフ トラッキング エンティティを使用しています。次のように、3 つのテーブル (アンケート、セクション、およびページ) があります。
Questionnaire
Id
Title
WhenClosedShowPageId
Section
Id
QuestionnaireId
Page
Id
SectionId
そのため、EF モデルの質問票にはセクションがあり、セクションにはページがあります。WhenClosedShowPageId は、アンケートが閉じられたときに表示するページを参照する null 許容の int です。すべての参照には、参照整合性を維持するための関連付けがあります。
すべてのエンティティを削除済みとしてマークして保存しようとすると、問題が発生します。データを取得したときに WhenClosedShowPageId が null だった場合、削除は正常に機能します。WhenClosedShowPageId が値に設定されている場合、EF は削除する順序を判断できません。これは理解できます。ただし、 WhenClosedShowPageId を null に設定し、エンティティを削除済みとしてマークして保存すると、同じことが起こります。私は、EF がデータベースで WhenClosedShowPageId を null に設定する更新ステートメントを最初に生成し、次にエンティティを削除することを期待していました。
この問題を回避する唯一の方法は、自分で 2 つの独立した保存を行うことです。1 つ目は WhenClosedShowPageId を null に設定し、2 つ目はエンティティを削除することです。ただし、これは非常に階層化されたアプリであり、このためだけに特別なケースを作成する必要はありません。
これを回避する方法はありますか?
ダレン