2017-02-15 71 views
0

我有這樣的實體:變化複合主鍵

public class GWDetail: Entity 
{ 
    public int? GWNR { get; set; } 
    public double? PRNR { get; set; } 
    public double? GWO { get; set; } 
    public double? GWU { get; set; } 

} 

與複合PK

 // Primary Key 
     HasKey(t => new { t.PRNR, t.GWNR }); 

映射並希望將其改變爲:

public class GWDetail: Entity 
{ 
    public int? GWNR { get; set; } 
    public int? PRNR { get; set; } // change from double to int !! 
    public double? GWO { get; set; } 
    public double? GWU { get; set; } 

} 

and

  // Primary Key 
     HasKey(t => t.Id) 

我已經創建了附加遷移腳本和應用更新的數據庫,但得到:

錯誤編號:5074,狀態:1,等級:16 對象「PK_dbo.GWDetail」是依賴於列「PRNR 」。 ALTER TABLE ALTER COLUMN PRNR失敗,因爲一個或多個對象訪問此列。

GWDetail目前還沒有任何記錄。但是有一個父表通過GWNR與它有1:n的關係。父表有記錄。

有人可以幫助我嗎? 感謝和問候,馬努

回答

0

我自己通過改變遷移腳本中的操作序列自己完成它。

這是EF創建的腳本:我用來更新數據庫

 public override void Up() 
    { 
     AddColumn("dbo.GWDetails", "Id", c => c.Int(nullable: false, identity: true)); 
     AlterColumn("dbo.GWDetails", "PRNR", c => c.Int(nullable: false)); 
     AlterColumn("dbo.GWDetails", "GWNR1", c => c.Int()); 
     DropPrimaryKey("dbo.GWDetails", new[] { "PRNR", "GWNR1" }); 
     AddPrimaryKey("dbo.GWDetails", "Id"); 
    } 

而且這裏的腳本:

 public override void Up() 
    { 
     DropPrimaryKey("dbo.GWDetails", new[] { "PRNR", "GWNR1" }); 
     AlterColumn("dbo.GWDetails", "PRNR", c => c.Int(nullable: false)); 
     AlterColumn("dbo.GWDetails", "GWNR1", c => c.Int()); 
     AddColumn("dbo.GWDetails", "Id", c => c.Int(nullable: false, identity: true)); 
     AddPrimaryKey("dbo.GWDetails", "Id"); 
    } 

關鍵行動是:

DropPrimaryKey("dbo.GWDetails", new[] { "PRNR", "GWNR1" }); 

我必須將其放在腳本的第一行。我不明白爲什麼EF會嘗試創建新的密鑰,而舊的密鑰仍然存在。 問候,馬努