切换到EF Core PostgreSQL提供程序
ABP CLI 和 入门 页面已提供使用PostgreSQL创建新解决方案的选项。请参阅 该文档 了解使用方法。本文档为希望在创建解决方案后手动切换到PostgreSQL的用户提供指导。
本文档说明如何为预配置SQL Server提供程序的 应用程序启动模板 切换到PostgreSQL数据库提供程序。
替换Volo.Abp.EntityFrameworkCore.SqlServer包
解决方案中的.EntityFrameworkCore项目依赖于Volo.Abp.EntityFrameworkCore.SqlServer NuGet包。请移除该包并添加相同版本的Volo.Abp.EntityFrameworkCore.PostgreSql包。
替换模块依赖项
在.EntityFrameworkCore项目中找到您的项目名EntityFrameworkCoreModule类,从DependsOn属性中移除typeof(AbpEntityFrameworkCoreSqlServerModule),添加typeof(AbpEntityFrameworkCorePostgreSqlModule)(同时将using Volo.Abp.EntityFrameworkCore.SqlServer;替换为using Volo.Abp.EntityFrameworkCore.PostgreSql;)。
使用UseNpgsql()
在.EntityFrameworkCore项目内的您的项目名EntityFrameworkCoreModule.cs中找到UseSqlServer()调用,替换为UseNpgsql()。
在.EntityFrameworkCore项目内的您的项目名DbContextFactory.cs中找到UseSqlServer()调用,替换为UseNpgsql()。
根据您的解决方案结构,可能需要更改更多
UseSqlServer()调用。
启用旧版时间戳行为
请在EF Core模块和DbContextFactory(IDesignTimeDbContextFactory)类的PreConfigureServices方法中启用Npgsql.EnableLegacyTimestampBehavior。
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
参见https://www.npgsql.org/efcore/release-notes/6.0.html#opting-out-of-the-new-timestamp-mapping-logic
更改连接字符串
PostgreSQL连接字符串与SQL Server连接字符串不同。因此,请检查解决方案中的所有appsettings.json文件并替换其中的连接字符串。有关PostgreSQL连接字符串选项的详细信息,请参阅connectionstrings.com。
通常需要更改.DbMigrator和.Web项目内的appsettings.json,但这取决于您的解决方案结构。
重新生成迁移
启动模板使用 Entity Framework Core 的 Code First 迁移 。EF Core迁移依赖于所选的DBMS提供程序。因此,更改DBMS提供程序将导致迁移失败。
- 删除
.EntityFrameworkCore项目下的Migrations文件夹并重新构建解决方案。 - 在程序包管理器控制台中运行
Add-Migration "Initial"(在解决方案资源管理器中选择.DbMigrator(或.Web)项目作为启动项目,在程序包管理器控制台中选择.EntityFrameworkCore项目作为默认项目)。
这将创建一个包含所有配置数据库对象(表)的数据库迁移。
运行.DbMigrator项目以创建数据库并填充初始数据。
运行应用程序
一切准备就绪。只需运行应用程序并开始编码。
抠丁客


