2017-07-24 5 views
0

Ich arbeite an meiner ASP.NET MVC-Anwendung mit Entity Framework. Nach der Aktivierung der Migration und das Hinzufügen einer Migration wie folgt aus:Aktualisierung der Entity Framework-Datenbank durch Migration

public override void Up() 
{ 
     DropForeignKey("dbo.PersonModel", "TeamModel_TeamId", "dbo.TeamModel"); 
     DropIndex("dbo.PersonModel", new[] { "TeamModel_TeamId" }); 
     RenameColumn(table: "dbo.PersonModel", name: "TeamModel_TeamId", newName: "TeamModelRefId"); 
     DropPrimaryKey("dbo.PersonModel"); 
     AddColumn("dbo.PersonModel", "IdPerson", c => c.Int(nullable: false, identity: true)); 
     AlterColumn("dbo.PersonModel", "TeamModelRefId", c => c.Int(nullable: false)); 
     AddPrimaryKey("dbo.PersonModel", "IdPerson"); 
     CreateIndex("dbo.PersonModel", "TeamModelRefId"); 
     AddForeignKey("dbo.PersonModel", "TeamModelRefId", "dbo.TeamModel", "TeamId", cascadeDelete: true); 
     DropColumn("dbo.PersonModel", "PersonId"); 
} 

public override void Down() 
{ 
     AddColumn("dbo.PersonModel", "PersonId", c => c.Int(nullable: false, identity: true)); 
     DropForeignKey("dbo.PersonModel", "TeamModelRefId", "dbo.TeamModel"); 
     DropIndex("dbo.PersonModel", new[] { "TeamModelRefId" }); 
     DropPrimaryKey("dbo.PersonModel"); 
     AlterColumn("dbo.PersonModel", "TeamModelRefId", c => c.Int()); 
     DropColumn("dbo.PersonModel", "IdPerson"); 
     AddPrimaryKey("dbo.PersonModel", "PersonId"); 
     RenameColumn(table: "dbo.PersonModel", name: "TeamModelRefId", newName: "TeamModel_TeamId"); 
     CreateIndex("dbo.PersonModel", "TeamModel_TeamId"); 
     AddForeignKey("dbo.PersonModel", "TeamModel_TeamId", "dbo.TeamModel", "TeamId"); 
} 

Ich erhalte eine Fehlermeldung wie folgt aus:

Fehlernummer: 2744, Zustand: 2, Klasse: 16
Multiple Identität Spalten für die Tabelle angegeben "Personenmodell". Es ist nur eine Identitätsspalte pro Tabelle zulässig.

Das ist mein Modell:

public class PersonModel 
{ 
    [Key] 
    public int IdPerson { get; set; } 
    public string NickName { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 

    public int TeamModelRefId { get; set; } 

    [ForeignKey("TeamModelRefId")]  
    public virtual TeamModel TeamModel { get; set; } 
} 

public class TeamModel 
{ 
    public TeamModel() 
    { 
     TeamMembers = new List<PersonModel>(); 
     this.Tournaments = new HashSet<TournamentModel>(); 
    } 

    [Key] 
    public int TeamId { get; set; } 

    public string TeamName { get; set; } 

    public virtual ICollection<PersonModel> TeamMembers { get; set; } 

    public ICollection<TournamentModel> Tournaments { get; set; } 

    public virtual MatchUpEntryModel MatchupEntry { get; set; } 

    public virtual MatchUpModel Matchup { get; set; } 
} 

Antwort

1

Sieht aus wie Sie Ihre Primärschlüsselspalte PersonId-IdPerson geändert haben. Der Fehler wird ausgelöst, da letzterer hinzugefügt wird, bevor der vorherige entfernt wird. Ordnen Sie Ihre Up() - Methode wie folgt an:

public override void Up() 
    { 
     DropForeignKey("dbo.PersonModel", "TeamModel_TeamId", "dbo.TeamModel"); 
     DropIndex("dbo.PersonModel", new[] { "TeamModel_TeamId" }); 
     RenameColumn(table: "dbo.PersonModel", name: "TeamModel_TeamId", newName: "TeamModelRefId"); 
     DropPrimaryKey("dbo.PersonModel"); 
     AddPrimaryKey("dbo.PersonModel", "IdPerson"); 
     CreateIndex("dbo.PersonModel", "TeamModelRefId"); 
     AddForeignKey("dbo.PersonModel", "TeamModelRefId", "dbo.TeamModel", "TeamId", cascadeDelete: true); 
     DropColumn("dbo.PersonModel", "PersonId"); 
     AddColumn("dbo.PersonModel", "IdPerson", c => c.Int(nullable: false, identity: true)); 
     AlterColumn("dbo.PersonModel", "TeamModelRefId", c => c.Int(nullable: false)); 
    } 
Verwandte Themen