通过迁移更新实体框架数据库



我正在使用实体框架开发我的 ASP.NET MVC应用程序。启用迁移并添加如下所示的迁移后:

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");
}

我收到这样的错误:

错误号:2744,状态:2,类:16
为表"PersonModel"指定的多个标识列。每个表只允许一个标识列。

这是我的模型:

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

看起来您已将主键列从PersonId更改为IdPerson。引发错误是因为后者是在删除前者之前添加的。重新排列你的 Up(( 方法,如下所示:

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

最新更新