1

in my Database models i added a second Column to a table which already had one link to the same table before. My Model before my changes looks as followed:

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

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

Now i added the second Link to the Table and the Model now looks as followed:

[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; }
}

When i now try to create the migrationscript the EntityFramework deletes the foreingn keys and creates a new column with the name 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");
    }

The problem is that this is a productive database and when the EF creates a new Field for the SerialNumber i lost the links to the correct field.

When i only delete the lines in the Up/Down Script which creates the new column i ran into problems because the EF Expects a Column named SerialNumber_ID.

Thanks for your help, Michael

1 Answer 1

1

Try to change SerialNumber class this way:

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

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

    [InverseProperty("ReplacementSerialNumber")]
    public virtual ICollection<RepairProcess> ReplacementSerialNumbers {get;set;}
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.