3

リンク テーブルによって関連付けられている既存の (MSSQL 2008 R2) データベースに 2 つのテーブルがあります。

2 つのテーブルは、「プラン」と「ヒント」です。リンク テーブルは「PlanTipLinks」です。

プランには多くのヒントを含めることができ、ヒントは複数のプランに関連付けることができます (つまり、多対多の関係です)。アプリケーションでは、「Plan.Tips」の関係のみを気にします。Tip.Plans の逆関係は必要ありません。

リンク テーブル内の外部キー参照を null にすることはできません。

この関係をマッピングするために、次の流暢な API コードを使用しています。

modelBuilder.Entity<Plan>()
    .HasMany(p => p.Tips)
    .WithMany()
    .Map("PlanTipLinks", (p, t) =>
        new
        {
            PlanId = p.Id,
            TipId = t.Id
        });

これにより、テーブルに正しいエントリが作成されます。問題は、プランを削除すると、PlanTipLinks テーブルで外部キー例外が発生することです。

おそらく、プランが削除されたときに PlanTipLinks テーブルにカスケードするように指示する必要がありますが、その方法がわかりません。HasMany/WithMany メソッドを使用して WillCascadeOnDelete メソッドを呼び出すことができないようです。

ここで何が欠けていますか?

4

1 に答える 1

1

EF CTP4の時点では、FluentAPIによる多対多の関連付けでカスケード削除を直接オンにする方法はありません。

とはいえ、リンクテーブル(つまりPlanTipLinks )の依存レコードを気にすることなく、原則(Planレコードなど)を削除できることを確認する場合は、カスケードをオンにする必要はありません。多対多の関連付けに関しては、EFコードファーストがクライアント側でカスケード削除を処理するため、データベース。

たとえば、Planオブジェクトを削除する場合、コードは最初にdeleteステートメントを送信してPlanTipLinksテーブルの依存レコードを削除し、その後、別のdeleteステートメントを送信してPlanレコードを削除するのに十分賢いです。

詳細については、次の投稿をご覧ください。
多対多の関係でのEFCTP4カスケード削除

于 2010-11-27T17:45:35.690 に答える