2012-05-03 2 views
15

私は現在、EF Code First 4.3を有効にしていますが、自動移行は無効です。私の質問は簡単ですエンティティフレームワークのデータ注釈は、.WillCascadeOnDelete(false)と同等です。

、私は外部キー関係がカスケード削除をトリガーしないように、私のクラスを飾るしたいモデル構成.WillCascadeOnDelete(偽)

のデータ注釈相当があります。

コードサンプル:

public class Container 
{ 
    public int ContainerID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Output> Outputs { get; set; } 
} 

public class Output 
{ 
    public int ContainerID { get; set; } 
    public virtual Container Container { get; set; } 

    public int OutputTypeID { get; set; } 
    public virtual OutputType OutputType { get; set; } 

    public int Quantity { get; set; } 
} 

public class OutputType 
{ 
    public int OutputTypeID { get; set; } 
    public string Name { get; set; } 
} 

私はこのような何かをしたい:私は正しく移行を足場にできるようになる

public class Output 
{ 
    [CascadeOnDelete(false)] 
    public int ContainerID { get; set; } 
    public virtual Container Container { get; set; } 

    [CascadeOnDelete(false)]  
    public int OutputTypeID { get; set; } 
    public virtual OutputType OutputType { get; set; } 

    public int Quantity { get; set; } 
} 

この道を。これは現時点でカスケード削除されるべき外部キー関係を足場にする。

モデルコンフィグレーション以外のアイデアはありますか?

+0

は、同じ質問があります。これを有効にする方法を見つけましたが(http://stackoverflow.com/a/33276901/4625305)、私が望むのは、1つの関係に対してのみ無効にすることです。 – AXMIM

答えて

19

いいえ該当するものはありません。カスケード削除を選択的に削除するにはFluent APIを使用する必要があります。また、グローバルに削除するにはOneToManyCascadeDeleteの規約を削除する必要があります。

+0

OneToManyCascadeDelete規約を削除し、[必須]のような注釈を外部キーに追加しても規約を削除しますか? – FRoZeN

+0

カスケード削除は、必要なリレーションに対してのみ使用する必要があり、この規則を削除すると削除されます。オプションはnullに設定されます。 –

+0

OneToManyCascadeDelete = falseを使用する場合、データアノテーションでカスケード削除を選択的に有効にするにはどうすればよいですか? – ironic

2

マッピングクラス(流暢な構文)を作成し、以下のコードを使用します。

// add relationships "Post" and "User" to a "Comment" entity 
this.HasRequired(t => t.Post) 
    .WithMany(t => t.Comments) 
    .HasForeignKey(d => d.PostID) 
    .WillCascadeOnDelete(false); // <--- 

this.HasOptional(t => t.User) 
    .WithMany(t => t.Comments) 
    .HasForeignKey(d => d.UserID) 
    .WillCascadeOnDelete(false); // <--- 

は、ここでは、より多くの情報が必要な場合は、流暢なマッピングを設定する方法についてnice postです。

+0

リンクは壊れた。 – AXMIM

0

だけFKプロパティNULL可能カスケードが起きてから削除防ぐことができます

public int? OutputTypeID { get; set; } 
関連する問題