如何使用 Entity Framework Core 2.0,在同一个解决方案中保留 Microsoft SQL Server 和 Postgres 的迁移,以便我的应用程序能够针对这两种类型进行目标设置?在我的情况下,如果在 MacOS 上运行,我想使用 Postgres,在 Windows 上运行时我想使用 SQL Server。在设置 DataContext 之前,我们使用调用 "RuntimeInformation.IsOSPlatform(..)" 并提取适当的连接字符串来确定平台。
当前解决方案分为一个 ASP.NET Core 项目和一个仅保留 SQL Server 的 "Data" 项目,其中包含 DataContext 和迁移。
我尝试过但失败了的方法有:
1. 创建用于迁移的单独项目,一个用于 SQL Server 迁移,另一个用于 Postgres 迁移。然后运行 "ef migrations add ...",并使用 "-p" 参数指向我想要使用的迁移项目。这与调用".UseNpgsql(connectionString, o => o.MigrationsAssembly(..)" 或 ".UseSqlServer(connectionString, o => o.MigrationsAssembly(..)" 一起完成。但是工具会抱怨找不到 DataContext,导致失败。
2. 与“1.”相同,但我们还在每个迁移项目中添加实现“IDesignTimeDbContextFactory<..>”的类。但是工具会抱怨找不到 DataContext,导致失败。
3. 将 SQL Server 迁移保留在与 DataContext 相同的项目中。使用 "-o" 参数调用 "ef migrations add ..",指定另一个输出文件夹以用于 Postgres 的迁移。这对 SQL Server 迁移有效,但对于 Postgres 迁移失败,因为它不喜欢在同一项目中存在具有相同名称的迁移(即使它们位于另一个文件夹中),并且即使将它们放在指定的文件夹中,迁移也是针对 SQL Server 生成的而不是针对 Postgres 生成的。
这是否是当前不支持的场景?我们应该坚持在所有平台上使用 Postgres 吗?(这可以正常工作)。
当前解决方案分为一个 ASP.NET Core 项目和一个仅保留 SQL Server 的 "Data" 项目,其中包含 DataContext 和迁移。
我尝试过但失败了的方法有:
1. 创建用于迁移的单独项目,一个用于 SQL Server 迁移,另一个用于 Postgres 迁移。然后运行 "ef migrations add ...",并使用 "-p" 参数指向我想要使用的迁移项目。这与调用".UseNpgsql(connectionString, o => o.MigrationsAssembly(..)" 或 ".UseSqlServer(connectionString, o => o.MigrationsAssembly(..)" 一起完成。但是工具会抱怨找不到 DataContext,导致失败。
2. 与“1.”相同,但我们还在每个迁移项目中添加实现“IDesignTimeDbContextFactory<..>”的类。但是工具会抱怨找不到 DataContext,导致失败。
3. 将 SQL Server 迁移保留在与 DataContext 相同的项目中。使用 "-o" 参数调用 "ef migrations add ..",指定另一个输出文件夹以用于 Postgres 的迁移。这对 SQL Server 迁移有效,但对于 Postgres 迁移失败,因为它不喜欢在同一项目中存在具有相同名称的迁移(即使它们位于另一个文件夹中),并且即使将它们放在指定的文件夹中,迁移也是针对 SQL Server 生成的而不是针对 Postgres 生成的。
这是否是当前不支持的场景?我们应该坚持在所有平台上使用 Postgres 吗?(这可以正常工作)。
DataContext
而不是DbContext
会增加混乱。您是尝试从DbContext派生吗,还是这是一个打字错误?您是否在正确的文件夹中运行了dotnet ef migrations
?您是否指定了正确的项目? - undefined