Entity Framework 5 Code Firstで自動生成された多対多リンクテーブルのカスケード削除オプションを選択的に削除することは可能ですか?これを必要とする簡単な例を次に示します。
public class Parent
{
public int Id { get; set; }
public virtual IList<ChildA> As { get; set; }
public virtual IList<ChildB> Bs { get; set; }
}
public class ChildA
{
public int Id { get; set; }
[Required]
public virtual Parent Parent { get; set; }
public virtual IList<ChildB> ChildBJoins { get; set; }
}
public class ChildB
{
public int Id { get; set; }
[Required]
public virtual Parent Parent { get; set; }
public virtual IList<ChildA> ChildAJoins { get; set; }
}
public class TestContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
public DbSet<ChildA> As { get; set; }
public DbSet<ChildB> Bs { get; set; }
}
リンクテーブルにカスケード削除オプションが導入されているため、現在の形式のこのコンテキストはデータベースには適用されません。手動リンクテーブルを作成する場合、Fluent APIを使用して、カスケードしないようにその片側を構成できますが、このオプションは多対多の関係では使用できません。
この質問のようにを削除することで、すべての多対多結合でカスケード削除を無効にできることを認識していますがManyToManyCascadeDeleteConvention
、それは私が求めているものではありません-1つの関係に対して、または理想的にはそれを実行できるようにしたいだけです1つの関係の片側。