2017-04-06 4 views
1

데이터베이스 모델에 이전에 동일한 테이블에 대한 링크가 이미있는 테이블에 두 번째 Column을 추가했습니다.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를위한 새로운 필드를 만들 때 내가 올바른 필드에 대한 링크를 잃어버린 것입니다.

새 열을 만드는 위/아래 스크립트의 줄만 삭제할 때 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