2016-08-24 3 views
2

ナビゲーションプロパティを[必須]に設定せずに、コードファーストプロジェクトにカスケード削除を設定する方法は?例えばASP.NET MVC。コードの最初の関係に手動で「カスケード削除」を追加するにはどうすればよいですか?

class MainClass{ 
    [Key] int id {get;set;} 
    public string name {get;set;} 
    public virtual ICollection<SubItem> subItems {get;set} 
} 

Class SubItem{ 
    [Key] int id {get; set;} 
    public string name {get;set;} 
} 

カスケードを持っているすべての関連サブアイテム

答えて

1

を削除する必要がメインクラスを削除するには最初に設定し、コードをNULL可能外部キーで削除し、これを達成する最善の方法はおそらくFluent APIを使用することです。

あなたDBContextにこの流暢APIのコードを追加します。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<SubItem>() 
      .HasOptional(o => o.MainClass) 
      .WithMany(m => m.subItems) 
      .HasForeignKey(k => k.MainClassId) 
      .WillCascadeOnDelete(true); 
} 

とあなたのサブ項目クラスは、これらのプロパティで更新する必要があります

Class SubItem 
{ 
    [Key] int id {get; set;} 
    public string name {get;set;} 
    public int? MainClassId { get; set;} 
    public virtual MainClass MainClass { get; set; } 
} 

あなたはMainClass項目にサブアイテムを削除している場合、私は信じています削除されるコンテキスト(MainClassオブジェクトを引っ張るときにinclude文を使用)でロードされなければならない(MUST)。

データベースにアクセスしてこの外部キーを設定して、削除時にカスケードを有効にすると、データベースでカスケード削除が処理されるため、サブアイテムをコンテキストにロードする必要はありませんMainClassオブジェクトは削除されます。

+0

私はそれを試みましたが、1x1ではなく、1xManyの依存関係です。 –

+1

@DanielSantos申し訳ありませんが、私は間違っていました。私はそれを修正し、過去にこれをどのようにしたのかの答えを更新しました。 – JustSomeDude

関連する問題