切换到EF Core 其它DBMS提供程序

    ABP框架为一些常见的DMBS提供了简化配置的集成包,你可以通过以下文档来学习如何切换到你喜欢的DBMS:

    你也可以不使用集成包配置DBMS提供程序,虽然总是建议使用集成包(它也使不同模块之间的依赖版本成为标准版本),但是如果没有用于DBMS提供程序的集成包,也可以手动集成.

    本文介绍了如何在不使用MySQL集成包的情况下切换到MySQL.

    删除模块依赖项

    YourProjectNameEntityFrameworkCoreModule 类的依赖列表中删除AbpEntityFrameworkCoreSqlServerModule.

    YourProjectNameEntityFrameworkCoreModule类中找到以下代码:

    • 调用的 UseMySql 代码是在 Pomelo.EntityFrameworkCore.MySql 包中定义的,方法还有附加选项,如果需要可以使用它.
    • 这段代码首先检查当前请求中是否存在到相同数据库的现有(活动)连接,并在可能的情况下重用它. 这允许在不同的DbContext类型之间共享单个事务. ABP处理其余的事情.
    • 如果没有活动的连接,它将把 ctx.ConnectionString 传递给UseMySql(这将创建新的数据库连接). 这里使用 ctx.ConnectionString 很重要. 不要传递静态连接字符串(或配置中的连接字符串). 因为ABP在多数据库或环境中动态确定正确的连接字符串.

    更改连接连接字符串

    MySQL连接字符串与SQL Server连接字符串不同. 所以检查你的解决方案中所有的 文件,更改其中的连接字符串. 有关MySQL连接字符串选项的详细内容请参见.

    通常需要更改 .DbMigrator.Web 项目里面的 appsettings.json ,但它取决于你的解决方案结构.

    启动模板包含YourProjectNameMigrationsDbContextFactory类,这是EF Core控制台命令所必须的类(比如Add-Migration和),在切换到MySql数据库时,我们同时也需要修改DbContextOptionsBuilder

    YourProjectNameMigrationsDbContextFactory 类中找到以下代码:

    将其替换为:

    重新生成迁移

    启动模板使用Entity Framework Core的Code First迁移. EF Core迁移取决于所选的DBMS提供程序. 因此更改DBMS提供程序会导致迁移失败.

    • 在包管理控制台中运行 (在解决方案资源管理器选择 .DbMigrator (或 .Web) 做为启动项目并且选择 .EntityFrameworkCore.DbMigrations 做为默认项目).

    这将创建一个配置所有数据库对象(表)的数据库迁移.

    运行 .DbMigrator 项目创建数据库和初始种子数据.

    它已准备就绪, 只需要运行该应用程序与享受编码.

    DBMS限制

    不同的DBMS可能存在一些限制, 如字段名称的最大长度, 索引长度等等. 模块可能提供了一些内置的解决方案. 你可以通过ModelBuilder来配置它 如: Identity Server模块

    相关讨论: