YESWEB业务模块中指定系统表
需求背景
YESWEB开发业务模块过程中模式都是分帐套的,一般情况下只是操作自己业务模块下的表,现在有个需求,业务模块中,有个通用配置,需要放到系统表中,这样一次配置所有账套都可以使用,如果不放系统表的话,每个账套都需要配置一次,并且如果修改,每个账套都要重复修改,很是麻烦,如果能在业务模块中创建系统数据库表,这样就简单多了,就能在系统库中做配置,然后所有业务账套都能使用这个配置
三个数据库表
Deng_Spec:设备规格表,将来所有业务账套都会使用这些规格,希望放入 系统数据库
,不分账套
Deng_SpecDetail:设备规格明细表,同设备规格表,希望放入 系统数据库
,不分账套
Deng_DeviceRegister:设备注册表,不同业务账套会注册不同的设备序列号,但规格都是统一的,希望放入 业务数据库库
,分账套
解决方案
新建业务模块 YESWEB.Module.Deng
生成设备注册表 Deng_DeviceRegister 的实体
新建业务模块的系统库相关操作项目 YESWEB.Module.DengSystemDB
新建一个业务模块,取名 YESWEB.Module.DengSystemDB
代表 业务模块Deng的 系统数据库
相关
生成规格表 Deng_Spec 和规格明细表 Deng_SpecDetail 实体
修改 DBMergeProvider.cs 中的 DBType 为 EnumDBType.System
修改后:
using Microsoft.EntityFrameworkCore; using System; using System.Linq; using YESWEB.Core; using YESWEB.Core.DBMerge; namespace YESWEB.Module.DengSystemDB { public class DBMergeProvider : IDBMerge { public EnumDBType DBType => EnumDBType.System; public void DoDBMigrate(ConnectionStrItem connItem) { using (var defaultEntities = new EntitiesContext(connItem)) { /* 不过数据库model有改动的话需要先执行下 add-migrate xxx 命令,然后每次运行程序GetPendingMigrations()就会检测有无更新,有的话自动迁移。 GetPendingMigrations方法官方文档说明 https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.entityframeworkcore.relationaldatabasefacadeextensions.getpendingmigrations?view=efcore-2.1 */ if (defaultEntities.Database.GetPendingMigrations().Any()) { defaultEntities.Database.Migrate(); } } } } }
因为我们只是用 YESWEB.Module.DengSystem.DB 提供的 实体模型,具体的业务代码我们还是要写入YESWEB.Module.Deng 的,在 YESWEB.Module.Deng 项目中添加
YESWEB.Module.DengSystemDB 的 项目引用
这样我们就完成了业务模块中系统数据库表的设置,如果表要放在 系统数据库
,我们就把模型添加到项目 YESWEB.Module.DengSystemDB
中,如果表要放在 业务账套数据库
中,则还和以前一样,放到项目 YESWEB.Module.Deng
中
最后测试的时候别忘了生成数据库迁移脚本