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

标签 sql-server sqlite asp.net-core .net-core entity-framework-core

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

现在我想将实现切换到 SQLite。我以为我可以从 SQL Server 运行初始迁移以创建数据库并将其应用到 SQLite。似乎它不能正常工作:例如。未应用主键的自动增量,然后我看到一些不一致(sqlite 提示 'int' 应该是 'INTEGER')等等。

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

谁能解释一下这是如何工作的?

注意:抱歉,我是 EF Code-First 和迁移的新手...谢谢!

最佳答案

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

例如,Id 列可能如下所示:

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

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

if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.SqlServer")
{
    // TODO
}
else if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.Sqlite")
{
    // TODO
}

关于sql-server - EF Core - SQLServer 迁移是否适用于 SQLite?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46587067/

相关文章:

sql-server - 使用 Windows 身份验证或 SQL 身份验证调用 SqlCmd

sql - sqlserver中日期时间和时间戳之间的区别?

c# - 打开不同的方法但使用相同的名称 - C#

android - SQLite中的日期不起作用

javascript - 如何将post参数绑定(bind)到 Controller 中的 Action 参数?

java - 在 Tomcat 上配置 SQL Server 连接池

PHP:SQLite 将值作为字符串返回

select - sqlite3 从多个表中选择 'where' 东西

entity-framework - 运行 dotnet tool restore 以使 dotnet-ef 命令可用

asp.net-core - 将 .NET Core 应用升级到 1.1 时出错