1

こんにちは、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 つ目はエンティティを削除することです。ただし、これは非常に階層化されたアプリであり、このためだけに特別なケースを作成する必要はありません。

これを回避する方法はありますか?

ダレン

4

1 に答える 1

0

エンティティに削除フラグが設定されている場合、Entity Framework は保留中の編集を破棄します。結局のところ、それを取り除くのであれば、最初にデータを更新することに何の意味があるのでしょうか? 残念ながら、これはあなたが見ているまさにその状態につながる可能性があります.

あなたの問題に対する最善の解決策は、 WhenClosedShowPageId を介して関連付けの両端を作成し、削除をカスケードしないようにすることです(End1 OnDeleteおよびにEnd2 OnDelete設定しNoneます)。そのページはアンケートの一部であるセクションの一部であるため、最終的にはいずれにせよ削除されるため、心配する必要はありません。

于 2011-04-26T23:05:20.040 に答える