项目

切换到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项目以创建数据库并填充初始数据。

运行应用程序

一切准备就绪。只需运行应用程序并开始编码。

在本文档中