2011-01-20 11 views
1

こんにちは私はEF 4自己追跡エンティティを使用しています。私は次のように3つのテーブル(アンケート、セクション、ページ)を持っています。削除時のEF4循環参照の問題

Questionnaire 
Id 
Title 
WhenClosedShowPageId 

Section 
Id 
QuestionnaireId 

Page 
Id 
SectionId 

EFモデルでは、アンケートにはセクションがあり、セクションにはページがあります。 WhenClosedShowPageIdは、アンケートが閉じられたときに表示するページを参照するnull可能なintです。すべての参照には、参照整合性を維持するための関連付けがあります。

問題は、すべてのエンティティを削除済みとしてマークして保存しようとしたときに発生します。データを取得したときにWhenClosedShowPageIdがnullだった場合、削除は正常に機能します。 WhenClosedShowPageIdが値に設定されている場合、EFは削除する順序を決めることができません。これは理解できる。しかし、WhenClosedShowPageIdをnullに設定し、エンティティを削除済みとしてマークして保存すると、同じことが起こります。データベース上でWhenClosedShowPageIdをnullに設定してから、エンティティを削除するために、最初に更新ステートメントを生成するとEFが期待していました。

この問題を回避するには、2つの独立した保存を自分自身で行うことが唯一の方法です。まず、WhenClosedShowPageIdをnullに設定し、2番目にエンティティを削除します。これは重く階層化されたアプリですが、私はこれのために特別なケースを作成する必要はありません。

これを回避する手段はありますか?

ダレン

答えて

0

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

問題の最良の解決策は、WhenClosedShowPageIdが削除をカスケードしないようにする(End1 OnDeleteEnd2 OnDeleteNoneに設定して)関連付けの両端を作成することです。そのページはアンケートの一部であるため、最終的には削除されるため、心配する必要はありません。

関連する問題