多数据库适配机制
本文档引用的文件
- CMSPluginEntityFrameworkCoreModule.cs
- CMSPluginMySQLModule.cs
- CMSPluginPostgreSqlModule.cs
- CMSPluginSqlServerModule.cs
- CMSPluginDbContext.cs
- CMSPluginDbProperties.cs
- CMSPluginEfCoreEntityExtensionMappings.cs
- CMSPluginEfCoreExtensions.MyEntityName.cs
- appsettings.json
目录
引言
本项目通过模块化设计实现了对MySQL、PostgreSQL和SQL Server三种主流数据库的动态适配与无缝切换。基于ABP框架的模块系统和Entity Framework Core的可扩展性,系统能够在不修改核心业务逻辑的前提下,灵活支持多种数据库后端。本文将深入剖析其架构设计、实现机制及使用方法。
项目结构与模块化设计
项目采用分层模块化架构,将数据库适配逻辑分离到独立的模块中。每个数据库类型(MySQL、PostgreSQL、SQL Server)都有对应的独立项目,确保依赖隔离和可插拔性。
图示来源
本节来源
核心EF Core模块分析
CMSPluginEntityFrameworkCoreModule 是整个数据库访问层的基础模块,负责定义通用的EF Core配置和实体映射规则。
该模块通过继承 AbpModule 并依赖 CMSPluginDomainModule 和 AbpEntityFrameworkCoreModule,构建了持久化层的基础能力。其主要职责包括:
- 在
PreConfigureServices阶段调用CMSPluginEfCoreEntityExtensionMappings.Configure(),初始化实体扩展映射 - 提供统一的
DbContext配置入口点 - 定义抽象的数据访问契约(如
ICMSPluginDbContext)
图示来源
本节来源
数据库特定模块实现
针对每种数据库,项目提供了专门的适配模块:CMSPluginMySQLModule、CMSPluginPostgreSqlModule 和 CMSPluginSqlServerModule。这些模块均继承自 CMSPluginEntityFrameworkCoreModule,并在 ConfigureServices 方法中完成数据库提供程序的注册。
MySQL模块
options.UseMySQL(x => { ... });
通过 UseMySQL 方法指定MySQL数据库提供程序,并配置迁移历史表名称和模式。
PostgreSQL模块
options.UseNpgsql(x => { ... });
通过 UseNpgsql 方法指定PostgreSQL数据库提供程序,使用Npgsql驱动。
SQL Server模块
options.UseSqlServer(x => { ... });
通过 UseSqlServer 方法指定SQL Server数据库提供程序。
所有模块均在 OnModelCreating 中调用 builder.ConfigureMyEntityName() 来应用实体模型配置,并通过 CMSPluginDbProperties 统一管理数据库对象的命名约定(如表前缀、模式名等)。
图示来源
- CMSPluginMySQLModule.cs
- CMSPluginPostgreSqlModule.cs
- CMSPluginSqlServerModule.cs
- CMSPluginDbContext.cs
本节来源