EF Core 2 跨数据库迁移
EF Core 2 cross database migrations
我正在尝试使用 EF Core 2.0 创建跨数据库迁移
当我在办公室工作时,我使用与团队共享的 sql 服务器数据库。为此,代码使用了引用 sql 服务器提供商
的配置
optionsBuilder.UseSqlServer(connectionString, serverOptions => {
serverOptions.MigrationsHistoryTable("__EFMigrations", "dbo");
});
创建新迁移时,这会使迁移代码使用 sql 服务器提供商的特定配置,例如
migrationBuilder.CreateTable(
name: "Customers",
schema: "dbo",
columns: table => new
{
EntityID = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Name = table.Column<string>(maxLength: 255, nullable: false)
},
constraints: table => {
table.PrimaryKey("PK_Customers", x => x.EntityID);
});
请注意Annotation
方法。
不在办公室时,我正在使用安装在 mac 上的 postgreSQL 实例,我需要使用特定的 postgreSQL 提供程序进行稍微不同的迁移
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn),
我知道我可以手动修改迁移以指定两个注释,因为这在 运行 特定数据库类型时没有影响。
然而,手动修改迁移是一项繁琐且容易出错的工作,我想避免。
有没有办法让EF自动生成两种Annotation方法?
我还尝试通过在 ModelBuilder 上指定选项来使用 DbContext OnModelCreating 方法
modelBuilder
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
或
modelBuilder.ForNpgsqlUseSerialColumns();
modelBuilder.ForSqlServerUseIdentityColumns();
但生成的迁移始终与特定时刻使用的提供程序相关。
无法让 EF Core 为您执行此操作。你正在做的是最好的方法。一种稍微不那么乏味的方法是保留两组独立的迁移——每个提供者一组。
有关详细信息,请参阅 EF Core Migrations with Multiple Providers。
我正在尝试使用 EF Core 2.0 创建跨数据库迁移
当我在办公室工作时,我使用与团队共享的 sql 服务器数据库。为此,代码使用了引用 sql 服务器提供商
的配置optionsBuilder.UseSqlServer(connectionString, serverOptions => {
serverOptions.MigrationsHistoryTable("__EFMigrations", "dbo");
});
创建新迁移时,这会使迁移代码使用 sql 服务器提供商的特定配置,例如
migrationBuilder.CreateTable(
name: "Customers",
schema: "dbo",
columns: table => new
{
EntityID = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Name = table.Column<string>(maxLength: 255, nullable: false)
},
constraints: table => {
table.PrimaryKey("PK_Customers", x => x.EntityID);
});
请注意Annotation
方法。
不在办公室时,我正在使用安装在 mac 上的 postgreSQL 实例,我需要使用特定的 postgreSQL 提供程序进行稍微不同的迁移
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn),
我知道我可以手动修改迁移以指定两个注释,因为这在 运行 特定数据库类型时没有影响。
然而,手动修改迁移是一项繁琐且容易出错的工作,我想避免。
有没有办法让EF自动生成两种Annotation方法?
我还尝试通过在 ModelBuilder 上指定选项来使用 DbContext OnModelCreating 方法
modelBuilder
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
或
modelBuilder.ForNpgsqlUseSerialColumns();
modelBuilder.ForSqlServerUseIdentityColumns();
但生成的迁移始终与特定时刻使用的提供程序相关。
无法让 EF Core 为您执行此操作。你正在做的是最好的方法。一种稍微不那么乏味的方法是保留两组独立的迁移——每个提供者一组。
有关详细信息,请参阅 EF Core Migrations with Multiple Providers。