2012-05-03 71 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),但我想要的是禁用它只爲一個關係。 – AXMIM

回答

19

不,沒有這樣的等價物。您必須使用流利的API來選擇性地刪除級聯刪除,或者您必須刪除全局刪除OneToManyCascadeDelete慣例。

+0

將刪除OneToManyCascadeDelete約定,即使您將[必需的]註釋添加到外鍵時移除約定? – FRoZeN

+0

級聯刪除應該只用於需要的關係,並且刪除這個約定會破壞它。可選只是設置爲空。 –

+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屬性爲空的,可以防止級聯的發生刪除:

public int? OutputTypeID { get; set; }