7

當我實現了一個雙向的1:基於這個答案1的關係:級聯刪除規則在EF 4.1代碼第一次使用的共享主鍵關聯

Primary /Foreign Key in Entity Framework

我定義的雙向關係是這樣的:

public class Student 
{ 
    public virtual int StudentId { get; set; } 
    public virtual Anamnesis Anamnesis { get; set; } 

    . . . 
} 

public class Anamnesis 
{ 
    [Key, ForeignKey("Student")] 
    public int AnamnesisId { get; set; } 

    public virtual Student Student { get; set; } 

    . . . 
} 

其中,Student是主體,Anamnesis是共享PK的實體。

現在我想創建的關係有一個Delete Rule = CASCADE。事實上,正在創建的關係已經刪除規則=所看到如下圖NO ACTION:

enter image description here

如果我手動刪除表屬性窗口中這種關係並添加其他關係與刪除規則= CASCADE ,代碼正常工作,因爲我希望允許我刪除一個學生,它是共享的具有相同ID的Anamnesis。

所以,在這裏不用我的問題:

有沒有在我的班級使用數據註釋(不流利API),使我得到一個CASCADE關係刪除規則的一種方式?我更喜歡使用數據註解,但如果這是不可能的,我會很高興與一些流利的API代碼,使這項工作。

注意

我已嘗試在此post顯示的流暢API代碼。它在我的雙向屬性的情況下不起作用。

+0

嗯......現在我發佈了這個問題,我發現我忘記了'AnamnesisId'屬性的'virtual'關鍵字拉迪斯拉夫的答案與上面有聯繫。也許這是問題所在。我必須重新測試一遍。 :D – 2011-04-28 22:47:41

+0

你能顯示完整的代碼嗎? EF代碼優先使用級聯刪除默認情況下每次都可能和我的例子在鏈接問題也使用它。 – 2011-04-28 22:49:40

+0

@Ladislav:再次測試並檢查數據庫中創建的關係。它仍然是一樣的。沒有級聯。所以,虛擬關鍵字不是問題。定義關係的代碼是我上面展示的代碼。你還需要什麼嗎? – 2011-04-28 22:58:29

回答

10

下流暢的API代碼完全打開級聯刪除的數據庫上:

public class Student 
{ 
    public virtual int StudentId { get; set; } 
    public virtual Anamnesis Anamnesis { get; set; } 
} 

public class Anamnesis 
{   
    public int AnamnesisId { get; set; } 
    public virtual Student Student { get; set; } 
} 

public class Context : DbContext 
{ 
    public DbSet<Student> Students { get; set; } 
    public DbSet<Anamnesis> Anamnesises { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Student>() 
        .HasRequired(s => s.Anamnesis) 
        .WithRequiredPrincipal(a => a.Student) 
        .WillCascadeOnDelete(); 
    } 
} 

enter image description here

+0

謝謝!這個伎倆。順便說一下:你有一個很好的博客。保持你在這裏和那裏做的偉大工作。上帝保佑你的生命。 – 2011-04-29 14:19:16

+0

@Leniel:感謝您的友好的話,並且很高興聽到您發現博客文章很有用:) – 2011-04-29 17:01:00

+0

此解決方案適用於我,我只是希望有一個數據註釋等效項也可行。 – angularsen 2012-11-21 09:22:47

7

此外,您還可以使用[必需]屬性,它會自動設置刪除規則相關關係中的「CASCADE」模式。 (並且在DB中將該實體的「允許空值」屬性設置爲「假」)