如何使用EFCore代码优先迁移来指定复合主键

时间:2018-08-23 20:36:10

标签: asp.net-core ef-migrations composite-primary-key asp.net-core-2.1 ef-core-2.1

我正在使用具有代码优先和迁移功能的Asp.Net Core 2.1,Mvc,c#,EF Core。

我正在尝试建立一个在Migration.Up()方法中具有复合主键的表:

migrationBuilder.CreateTable(
    name: "TagValueAttributes",
    columns: table => new {
        TagValueID = table.Column<Int64>(nullable: false),
        Identifier = table.Column<string>(nullable: false, unicode: true, maxLength: 256),
        Value = table.Column<string>(nullable: true, unicode: true, maxLength: 2048)
    },
    constraints: table => {
        table.PrimaryKey(
            name: "PK_TagValueAttributes",
            columns: // what goes here???
        )
    }
);

我不知道为columns constraints调用的table.PrimaryKey()参数指定什么。我希望列TagValueIDIdentifier形成组合键。

我需要为columns参数指定什么?

1 个答案:

答案 0 :(得分:2)

为什么要将它放在Migration.Up()方法中?

您可以通过覆盖DbContext方法通过OnModelCreating()中的Fluent API来做到这一点:

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<TagValueAttributes>().HasKey(t => new { t.TagValueID, t.Identifier };
}

如果您想将其保留在Migration.Up()中,请执行以下操作:

table.PrimaryKey(
    name: "PK_TagValueAttributes",
    columns: t => new { t.Identifier, t.TagValueID }
);