C# 实体框架核心代码迁移能否针对不同的数据库类型可靠、切实地工作

C# 实体框架核心代码迁移能否针对不同的数据库类型可靠、切实地工作,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我想澄清一下,这是我正在使用的核心版本实体框架 我想我知道答案,但这都是基于我多年前使用的其他ORM的假设。我猜答案是“它取决于特定的数据库和使用的功能(键、约束等)” 此外,我想澄清的是,我不是在问是否可以从不同DBs的模型生成迁移。我知道答案是肯定的。我问的是一组已经生成的迁移。一组迁移可以应用于不同的数据库类型。该工具帮助不大(问题),因此您可能需要手动编辑迁移文件 是的,这确实取决于数据库支持哪些功能,因此阻力最小的途径是使用跨提供者可用的最低通用功能集。您可以使用注释和ActivePr

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

我想我知道答案,但这都是基于我多年前使用的其他ORM的假设。我猜答案是“它取决于特定的数据库和使用的功能(键、约束等)”


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

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

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

protected override void Up(MigrationBuilder MigrationBuilder)
{
migrationBuilder.AddColumn(
表:“博客”,
姓名:“Id”,
可为空:false)
//在SQLite上使用自动增量
.Annotation(“自动增量”,真)
//在SQL Server上使用标识
.Annotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn);
如果(ActiveProvider==“Microsoft.EntityFrameworkCore.SqlServer”)
{
CreateSequence(“SomeSequence”);
}
}

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

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

protected override void Up(MigrationBuilder MigrationBuilder)
{
migrationBuilder.AddColumn(
表:“博客”,
姓名:“Id”,
可为空:false)
//在SQLite上使用自动增量
.Annotation(“自动增量”,真)
//在SQL Server上使用标识
.Annotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn);
如果(ActiveProvider==“Microsoft.EntityFrameworkCore.SqlServer”)
{
CreateSequence(“SomeSequence”);
}
}

您的问题是,EF在创建表时生成的内部迁移表是否可以复制到完全不同的数据库技术并工作?当然不是。我什么时候问过关于“内部迁移表”的问题?您是指迁移历史记录表吗?这是迁移的一部分。另一半是特定于平台的代码,用于检查迁移历史记录表,以确定是否需要修改表。整个过程是特定于数据库的。创建和/或删除表的代码也是特定于数据库的。无法针对不同的数据库类型进行迁移。特定于平台的含义是.net core、4.5等?你的评论把我弄糊涂了。让我重新表述一下:通过迁移,我指的是生成的
201608222034047_MyMigration.cs
201608222034047_MyMigration.designer.cs
文件。这些文件中生成的代码是否特定于数据库和提供程序?您要问的是,EF在创建表时生成的内部迁移表是否可以复制到完全不同的数据库技术并工作?当然不是。我什么时候问过关于“内部迁移表”的问题?您是指迁移历史记录表吗?这是迁移的一部分。另一半是特定于平台的代码,用于检查迁移历史记录表,以确定是否需要修改表。整个过程是特定于数据库的。创建和/或删除表的代码也是特定于数据库的。无法针对不同的数据库类型进行迁移。特定于平台的含义是.net core、4.5等?你的评论把我弄糊涂了。让我重新表述一下:通过迁移,我指的是生成的
201608222034047_MyMigration.cs
201608222034047_MyMigration.designer.cs
文件。这些文件中生成的代码是否特定于数据库和提供程序?