14

比方說,我有這兩個非常基本的實體:EF4.1代碼首先:如何禁用級聯刪除在相關的實體沒有導航屬性的關係

public class ParentEntity 
{ 
    public int Id; 
    public virtual ICollection<ChildEntity> Childrens; 
} 

public class ChildEntity 
{ 
    public int Id; 
    public int ParentEntityId; // Foreign Key 
    public virtual ParentEntity parent; // [NOTWANTED] 
} 

對於一些原因,我不希望ChildEntity將參考資料保留給其父母。我只是想讓它保留ParentEntity標識,但沒有更多。 到目前爲止,沒問題,我只是刪除[NOTWANTED]一行,一切都按預期工作。

我的問題在這裏是:如何禁用級聯刪除在這種特定情況下?

如果我仍然有父導航屬性這將是那麼容易,因爲:

modelBuilder.Entity<ChildEntity>() 
    .HasRequired(c => c.parent) 
    .WithMany(p => p.Childrens) 
    .WillCascadeOndelete(false) 

但是沒有導航屬性我不知道我怎樣才能實現以禁用刪除級聯(不包括全球禁用它當然,也不是每桌,但只是關係)。

我已經把現在做的是建立外鍵的可空INT,以禁用刪除級聯,但是這並不漂亮:

public int? ParentEntityId; // Foreign Key - nullable just to disable cascade on delete 

我怎樣才能得到它一起工作流利的API?認爲它應該是可能的。

+0

你需要.hasOne(ParentEntity) – Saeid 2017-06-13 15:43:24

回答

17

必須從關聯的另一邊對其進行配置:

modelBuilder.Entity<ParentEntity>() 
    .HasMany(p => p.Children) 
    .WithRequired() 
    .HasForeignKey(c => c.ParentEntityId) 
    .WillCascadeOnDelete(false); 
+1

Woooo! 這很好,非常感謝:) – darkey 2012-02-03 23:07:54

+0

我必須改變.WithRequired()爲.WithRequired(c => c.ParentEntity) – Mason240 2015-07-10 18:04:00

+0

如果你有一個從兒童到父母的導航屬性,那麼你可以配置級聯孩子映射。 – 2015-07-10 21:20:49

相關問題