EF Core-SQLServer迁移是否适用于SQLite?

Lea*_*ner 2 sql-server sqlite entity-framework-core .net-core asp.net-core

我有一个简单的项目,最初使用SQL Server作为EF Core和Code-First方法的后端(遵循本教程:https : //docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore / new-db

现在,我想将实现切换到SQLite。我以为可以从SQL Server运行初始迁移来创建数据库,然后将其应用于SQLite。似乎无法正常工作:例如。没有应用主键的自动增量,那么我看到一些不一致的地方(sqlite抱怨'int'哪个应该是'INTEGER'),等等。

那么,这是否意味着迁移依赖于后端?如果是,那么是否不应该在嵌套文件夹中创建它们(例如./Migrations/SQLServer)?

有人能解释一下它是如何工作的吗?

注意:对不起,我是EF Code-First和迁移领域的新手...谢谢!

bri*_*lam 5

Add-Migration/ dotnet ef migrations add命令生成的迁移是特定于后端的,但是您可以手动编辑它们以使其与多个后端兼容。最简单的方法是按照@alwayslearning的答案中所述生成两组迁移,然后将它们组合为一个迁移集。

例如,一Id列可能看起来像这样:

Id = table.Column<int>(nullable: false)
    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
    .Annotation("Sqlite:Autoincrement", true);
Run Code Online (Sandbox Code Playgroud)

您还可以有条件地执行后端之间可能根本不同的操作:

if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.SqlServer")
{
    // TODO
}
else if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.Sqlite")
{
    // TODO
}
Run Code Online (Sandbox Code Playgroud)