簡體   English   中英

通過遷移更新實體框架數據庫

[英]Updating Entity Framework Database by migration

我正在使用Entity Framework開發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));
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM