如何使用 EFCore Code First Migrations 指定复合主键

How to specify a composite primary key using EFCore Code First Migrations

我正在使用 Asp.Net Core 2.1、Mvc、c#、带代码优先和迁移的 EF Core。

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

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

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

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

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

您可以通过 DbContext 中的 Fluent API 覆盖 OnModelCreating() 方法来完成此操作:

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