我想從autoincrement id轉移到復合主鍵。那麼,這兩個實體

public class SeasonTeam
{
    public int SeasonTeamId { get; set; }
    public int SeasonId { get; set; }   
    public int TeamId { get; set; }
}


public class GroupEntry
{
    public int GroupEntryId { get; set; }
    public int SeasonTeamId { get; set; }

    public SeasonTeam SeasonTeam { get; set; }
}

現在看起來像這樣

public class SeasonTeam
{
    public int SeasonId { get; set; }   
    public int TeamId { get; set; }
}


public class GroupEntry
{
    public int GroupEntryId { get; set; }
    public int SeasonId { get; set; }   
    public int TeamId { get; set; }

    public SeasonTeam SeasonTeam { get; set; }
}

Visual Studio生成了遷移代碼,但它破壞了數據。

migrationBuilder.AddColumn<int>(
    name: "SeasonId",
    table: "GroupEntry",
    nullable: false,
    defaultValue: 0);

migrationBuilder.AddColumn<int>(
    name: "TeamId",
    table: "GroupEntry",
    nullable: false,
    defaultValue: 0);



migrationBuilder.DropForeignKey(name: "FK_GroupEntry_SeasonTeam_SeasonTeamId", table: "GroupEntry");
migrationBuilder.DropPrimaryKey(name: "PK_SeasonTeam", table: "SeasonTeam");
migrationBuilder.DropColumn(name: "SeasonTeamId", table: "SeasonTeam");

默認值0顯然不起作用,我需要來自引用的SeasonTeam表的ID,但我沒有找到任何示例。在刪除舊主鍵列之前,如何為新的複合鍵設置正確的id值?

一般承認的答案

您不能使用EF的API以編程方式執行此操作,但是,如果您可以編寫SQL以將值從一個表移動到另一個表,則可以在添加列操作之後和刪除列操作之前添加自定義遷移步驟。

migrationBuilder.Sql(@"INSERT INTO ...(your SQL here)");

從您問題中的有限信息,我無法告訴您SQL應該是什麼。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow