カスケード複合キーのエンティティを削除するときに主眼前に削除されていない依存オブジェクト。具体的には、EFによって発行されたSQL命令は、従属エンティティの前で主体を削除しようとします。Entity Frameworkは - 私は<strong>依存オブジェクト<strong>複合キー</strong>と</strong>の<strong>カスケード削除</strong>で問題を抱えている
私はOnDelete="Cascade"
を私のEFモデルのCSDLとSSDLの両方に設定しています。従属エンティティをメモリに明示的にロードしてEFがそれらを処理することがわかっています。私はこれが別のFKの関係で正しく働いており、EFは原則を削除する前に子供のエンティティを正しく削除します。
しかし、これはそうではなく、依存エンティティにコンポジットキーがあるためです。スキーマを簡単に見:
Entity A Entity B Entity A_B
ID (PK) ID (PK) A_ID (PK, FK to A)
B_ID (PK, FK to B)
私は、エンティティA_Bのエントリは、私は、エンティティAを削除すると、削除したい
私はObjectStateManagerに見て、AのA_B実体がメモリにロードされ、マークされ見ることができます削除のために、EFはのA_Bsを削除する前にA を削除するSQLコマンドを発行します。これは、依存するエンティティが独自のPKを持っているときにうまく動作しますが、コンポジットキーのときにはうまくいかないようです。 EFのFKアソシエーション(SSDLとCSDLの両方)に削除をカスケードする必要があると明示しても、最初に子を削除しません。
この場合も、AとA_Bsの両方がメモリにロードされており、ObjectStateManagerにすべてが削除済みとしてマークされています。私はContextに対してLoadProperty呼び出しを介してメモリ内の子エンティティを明示的に読み込みますが、プロキシ作成を有効にしたPOCOを使用しています。
誰でもこれを見ましたか?コンポジットキーは本当に問題なのですか? 1つのケースでは正しい順序でSQLコマンドを処理するのはなぜですか?
EDIT:私は両方のOnDelete(http://msdn.microsoft.com/en-us/library/cc716734.aspx)とリレーションシップ・マネジメント(http://msdn.microsoft.com/en-us/library/ee373856.aspx)のドキュメントを読みました。 「識別と非識別の関係に関する留意事項」というセクションは、私がしたいことが可能であり、実際には期待されていることを暗示しているようです。おそらく、データベースのEFプロバイダアセンブリ内に何かがあるでしょうか?私はIBM.Data.DB2アセンブリを使用してInformixデータベースに対して、SQL Serverデータベースに対しては使用していません。
(さらにアップデート:私は、IBM DB2のv9.7fp3aとEFプロバイダのベータ版の更新に更新したからhttp://www.ibm.com/developerworks/forums/thread.jspa?threadID=345634&tstart=0)