实体框架核心代码迁移可以可靠地和实际地针对不同的数据库类型工作

时间:2016-08-23 21:57:19

标签: c# entity-framework entity-framework-core

我想澄清一下,这是我正在使用的核心版本实体框架。

我想我知道答案,但这完全基于我多年前使用的其他ORM的假设。我的猜测是答案类似于"它取决于具体的数据库和使用的功能(键,约束等)"。

此外,我想澄清一点,我并不是在询问是否可以从不同数据库的模型生成迁移。我知道答案是肯定的。我问的是一组已经生成的迁移。

1 个答案:

答案 0 :(得分:2)

一组迁移可以应用于不同的数据库类型。工具没有多大帮助(问题#1825),因此您可能需要手动编辑迁移文件。

是的,它确实取决于数据库支持的功能,因此阻力最小的路径是使用提供商可用的最低通用功能集。您可以使用注释和ActiveProvider属性来影响特定于提供程序的配置。例如:

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.AddColumn<int>(
        table: "Blogs",
        name: "Id",
        nullable: false)
        // Use AUTOINCREMENT on SQLite
        .Annotation("Autoincrement", true)
        // Use IDENTITY on SQL Server
        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

    if (ActiveProvider == "Microsoft.EntityFrameworkCore.SqlServer")
    {
        migrationBuilder.CreateSequence("SomeSequence");
    }
}