EF Core 2 跨数据库迁移



我正在尝试使用 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自动生成两个注释方法?

我还尝试通过在模型构建器上指定选项来使用 DbContext OnModelCreate 方法

modelBuilder
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

modelBuilder.ForNpgsqlUseSerialColumns();
modelBuilder.ForSqlServerUseIdentityColumns();

但是生成的迁移 它始终与该特定时刻使用的提供程序相关。

没有办法让 EF Core 为你做这件事。你正在做的是最好的方法。稍微不那么乏味的方法是保留两组单独的迁移 - 每个提供程序一组

。有关详细信息,请参阅具有多个提供程序的 EF Core 迁移。

相关内容

  • 没有找到相关文章