gpt4 book ai didi

c# - Entity Framework Core - 与版本 5+ 无关的输出数据库

转载 作者:行者123 更新时间:2023-12-04 03:45:03 26 4
gpt4 key购买 nike

我有一个使用 EF Core 的应用程序,最初是使用 V3.1.1 编写的。我们决定冒险更新到 v5.0.1,现在它已经停止预览了。

该应用程序同时支持 MSSQL 和 SQLite,并且最初运行良好。迁移是由工具和文档创建的,几乎不可知 here提供了 3 种使用多个数据库的方法:

  1. 使用 --context 选项创建多个上下文并在它们之间切换 dotnet ef migrations
  2. 创建多个迁移程序集并使用 MigrationsAssembly(...) 方法选择一个。
  3. 根据工具创建的迁移大部分是不可知的事实,有时您确实需要做一些特定于数据库的事情,使用 Migration 类中的方法来确定您在哪个数据库上运行并采取相应行动。

我们使用了选项 3。

这导致实体如下:

public class LocalUser
{
// id etc removed
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}

按如下方式创建迁移:

 migrationBuilder.CreateTable(
name: "Users",
columns: table => new
{
FirstName = table.Column<string>(nullable: true),
LastName = table.Column<string>(nullable: true),
Email = table.Column<string>(nullable: true),
}

它在 MSSQL 和 SqlLite 上运行良好 - 无需对生成的迁移文件进行任何手动修改。

但是,升级到 v5.0.1 后,现在会像这样创建相同的迁移(当按照配置运行时使用 MSSQL):

migrationBuilder.CreateTable(
name: "Users",
columns: table => new
{
FirstName = table.Column<string>(type: "nvarchar(max)", nullable: true),
LastName = table.Column<string>(type: "nvarchar(max)", nullable: true),
Email = table.Column<string>(type: "nvarchar(max)", nullable: true),
}

请注意包含了明确的 type: 参数。

这现在无法在 SQLite 上运行,并出现与“(max)”相关的错误是语法错误 - 当然是这样。

此外,上面链接的文档已更新以删除对选项 3 的任何讨论 - 为多数据库支持讨论的唯一两个选项是多个派生上下文和多个迁移程序集 - 当您的数据库是相当简单,只存储核心类型,就像我们的一样。

有谁知道为什么会改变这种行为,以及是否可以恢复之前的行为? (理想情况下,无需将每个属性的列类型显式设置为与数据库无关的内容,如“文本”)

谢谢

最佳答案

遗憾的是,这已被确认为新的预期行为。

https://github.com/dotnet/efcore/issues/23714

现在要进行多个迁移组装。

关于c# - Entity Framework Core - 与版本 5+ 无关的输出数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65319430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com