2017-04-06 65 views
1

创建一个新列,我向已经有一个链接到同一个表的表添加了第二列。 我改变之前我的模型看起来如下:c#EntityFramework CodeFirst迁移为我的数据库模型中现有的一个

[Table("RepairProcesses", Schema = "Data")]  
public class RepairProcess : DatabaseBase 
{ 
    [DataMember] 
    [Column("SerialNumberID")] 
    public Guid SerialNumberID { get; set; } 

    [ForeignKey("SerialNumberID")] 
    public virtual SerialNumber SerialNumber { get; set; } 
} 

现在我加入了第二个链接到表和模型现在看起来如下:

[Table("RepairProcesses", Schema = "Data")]  
public class RepairProcess : DatabaseBase 
{ 
    [DataMember] 
    [Column("SerialNumberID")] 
    public Guid SerialNumberID { get; set; } 

    [DataMember] 
    [Column("ReplacementSerialNumberID")] 
    public Guid? ReplacementSerialNumberID { get; set; } 

    [ForeignKey("SerialNumberID")] 
    public virtual SerialNumber SerialNumber { get; set; } 

    [ForeignKey("ReplacementSerialNumberID")] 
    public virtual SerialNumber ReplacementSerialNumber { get; set; } 
} 

现在当我试图创建migrationscript的EntityFramework删除foreingn键并创建一个名为SerialNumber_ID的新列。

public override void Up() 
    { 
     DropForeignKey("Data.RepairProcesses", "SerialNumberID", "Data.SerialNumbers"); 
     AddColumn("Data.RepairProcesses", "SerialNumber_ID", c => c.Guid()); 
     AddColumn("Data.RepairProcesses", "ReplacementSerialNumberID", c => c.Guid()); 
     CreateIndex("Data.RepairProcesses", "SerialNumber_ID"); 
     CreateIndex("Data.RepairProcesses", "ReplacementSerialNumberID"); 
     AddForeignKey("Data.RepairProcesses", "ReplacementSerialNumberID", "Data.SerialNumbers", "ID"); 
     AddForeignKey("Data.RepairProcesses", "SerialNumber_ID", "Data.SerialNumbers", "ID"); 
    } 

    public override void Down() 
    { 
     DropForeignKey("Data.RepairProcesses", "SerialNumber_ID", "Data.SerialNumbers"); 
     DropForeignKey("Data.RepairProcesses", "ReplacementSerialNumberID", "Data.SerialNumbers"); 
     DropIndex("Data.RepairProcesses", new[] { "ReplacementSerialNumberID" }); 
     DropIndex("Data.RepairProcesses", new[] { "SerialNumber_ID" }); 
     DropColumn("Data.RepairProcesses", "ReplacementSerialNumberID"); 
     DropColumn("Data.RepairProcesses", "SerialNumber_ID"); 
     AddForeignKey("Data.RepairProcesses", "SerialNumberID", "Data.SerialNumbers", "ID"); 
    } 

的问题是,这是一个生产数据库,当EF为的serialNumber创建一个新的领域我失去了链接到正确的领域。

当我只删除创建新列的Up/Down Script中的行时,我遇到了问题,因为EF期望列名为SerialNumber_ID。

感谢您的帮助, 迈克尔

回答

1

试图改变SerialNumber类是这样的:

public class SerialNumber 
{ 
    //other stuff.... 

    [InverseProperty("SerialNumber")] 
    public virtual ICollection<RepairProcess> SerialNumbers {get;set;} 

    [InverseProperty("ReplacementSerialNumber")] 
    public virtual ICollection<RepairProcess> ReplacementSerialNumbers {get;set;} 
} 
+0

太谢谢你了!这有诀窍 – Michael

相关问题