如何使用 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
参数指定什么。我想要列 TagValueID
和 Identifier
来形成复合键。
我需要为 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 }
);
我正在使用 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
参数指定什么。我想要列 TagValueID
和 Identifier
来形成复合键。
我需要为 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 }
);