2012-08-14 48 views
9

我正在使用EF 4.3遷移功能來創建數據庫遷移腳本。 當我運行Add-轉移命令生成的腳本創建爲這樣:EntityFramework遷移cascadeDelete參數

 CreateTable(
      "dbo.Recipients", 
      c => new 
       { 
        RecipientID = c.String(nullable: false, maxLength: 128), 
        SurveyRoundID = c.String(nullable: false, maxLength: 128), 
        LastUpdatedAt = c.DateTime(), 
       }) 
      .PrimaryKey(t => t.RecipientID) 
      .ForeignKey("dbo.Employees", t => t.EmployeeID, cascadeDelete: true) 
      .ForeignKey("dbo.SurveyRounds", t => t.SurveyRoundID, cascadeDelete: true) 
      .Index(t => t.EmployeeID) 
      .Index(t => t.SurveyRoundID); 

我的問題是,scafolding遷移選擇cascadeDelete是真實的,即使實體收件人不屬於關係的高手。

現在我手動將cascadeDelete參數更改爲false,但我想知道爲什麼它默認選擇true。

謝謝, 伊多。

回答

8

它按預期工作。它不是關係中的主體實體,並且因爲它定義了外鍵約束,並且此約束具有級聯刪除選項。將級聯刪除設置爲true(首先在EF代碼中默認,除非您刪除約定或在流暢映射中更改它)說如果Employee記錄被刪除,級聯刪除將觸發刪除RecipientSurveyRounds同樣適用)。

這個模型對於級聯刪除並不理想,因爲實體依賴於多重關係。您應該直接在實體映射中刪除級聯刪除。

+0

您是否知道如何在遷移中不使用含有'Sql(..)'的DDL定義'ON DELETE SET NULL'? – JoeBrockhaus 2015-07-22 22:51:03

11

感謝您的回答,它幫助我,因爲我注意到,有時在嘗試更新數據庫時出現錯誤,因爲我的幾個類有多個關係,使級聯刪除不理想。

請參閱下面的刪除級聯刪除默認設置:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
} 

這裏面去Context類。

+0

正是我在找的東西! – Mixxiphoid 2015-07-11 09:24:58

+1

這對我來說很好。這真的應該選擇加入而不是退出! – 2015-08-20 07:04:20

相關問題