2017-04-06 15 views
1

私のデータベースモデルでは、前に同じテーブルへのリンクが1つあったテーブルに2番目の列を追加しました。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; } 
} 

は、今私は、表に2つ目のリンクを追加し、モデルは現在、以下のようになります: 私の変更の前に私のモデルは以下のように見えます

[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

関連する問題