From ed5e1df9497d868347d47e0caefe2d19cc95ed85 Mon Sep 17 00:00:00 2001 From: LemonNoCry <ningmengbuku@outlook.com> Date: Sat, 28 Dec 2024 15:02:05 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=F0=9F=8E=A8=E2=9A=A1=EF=B8=8F?= =?UTF-8?q?=E9=87=8D=E5=A4=A7=E6=9B=B4=E6=96=B0:=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 随着日益增多的业务表,每次程序启动要扫描一遍表对比结构,会严重影响启动速度,故此优化 1.增加特性[MigrateVersionAttribute]用于标记Model版本,切记再修改Model结构后,修改版本号以便同步结构 2.增加特性[MigrateAttribute]用于标记是否迁移表,默认迁移 3.统一迁移逻辑,核心类:[MigrateCore.cs],增加表:[TableVersion],记录表版本号同EF逻辑一般 4.统一多表、多库迁移逻辑。例如:业务表A结构迁移,会同步所有租户的结构 迁移核心逻辑: 1.Model标记不迁移->程序不做任何处理 return 2.如果没有标记版本号,默认只会初始化,后续修改表结构也不会同步 3.调整表结构后,修改表版本号,程序启动时对比表[TableVersion]中已经记录的版本号: 比记录大(>):会同步结构; 比记录小或等(<=):跳过同步; --- Blog.Core.Api/Blog.Core.Api.csproj | 1 - Blog.Core.Api/Blog.Core.Model.xml | 510 +++++++++--------- .../Controllers/Systems/DataBaseController.cs | 2 +- .../Systems/DynamicCodeFirstController.cs | 2 +- .../Tenant/TenantByDbController.cs | 1 + .../Tenant/TenantByIdController.cs | 1 + .../Tenant/TenantByTableController.cs | 1 + Blog.Core.Common/Blog.Core.Common.csproj | 1 + Blog.Core.Common/DB/Aop/SqlsugarAop.cs | 4 +- Blog.Core.Common/DB/EntityUtility.cs | 1 + Blog.Core.Common/DB/RepositorySetting.cs | 8 +- Blog.Core.Common/DB/TenantUtil.cs | 2 +- Blog.Core.Common/Seed/DBSeed.cs | 238 ++++---- .../Seed/SeedData/BusinessDataSeedData.cs | 1 + .../SeedData/MultiBusinessDataSeedData.cs | 1 + .../SeedData/MultiBusinessSubDataSeedData.cs | 1 + .../Seed/SeedData/SubBusinessDataSeedData.cs | 1 + .../Seed/SeedData/TenantSeedData.cs | 2 +- .../HostedService/SeedDataHostedService.cs | 2 +- Blog.Core.IServices/IPayServices.cs | 1 + .../Attributes/DataDictionaryAttribute.cs | 13 + .../Attributes/MigrateAttribute.cs | 13 + .../Attributes/MigrateVersionAttribute.cs | 21 + Blog.Core.Migrate/Blog.Core.Migrate.csproj | 11 + Blog.Core.Migrate/Core/IMigrate.cs | 13 + Blog.Core.Migrate/Core/MigrateCore.cs | 99 ++++ Blog.Core.Migrate/Core/TableVersion.cs | 18 + Blog.Core.Model/Base/BaseLog.cs | 5 +- .../{Models => Base}/RootTkey/BaseEntity.cs | 6 +- .../RootTkey/DepartmentRoot.cs | 6 +- .../RootTkey/Interface/IDeleteFilter.cs | 2 +- .../{Models => Base}/RootTkey/ModulesRoot.cs | 5 +- .../RootTkey/PermissionRoot.cs | 6 +- .../RootTkey/RoleModulePermissionRoot.cs | 5 +- .../RootTkey/RootEntityTkey.cs | 5 +- .../RootTkey/TopicDetailRoot.cs | 4 +- .../{Models => Base}/RootTkey/UserRoleRoot.cs | 4 +- .../RootTkey/sysUserInfoRoot.cs | 6 +- .../{ => Base}/Tenants/ITenantEntity.cs | 4 +- .../Tenants/MultiTenantAttribute.cs | 4 +- .../{ => Base}/Tenants/TenantTypeEnum.cs | 2 +- Blog.Core.Model/Blog.Core.Model.csproj | 2 +- .../CustomEnums/AuthorityScopeEnum.cs | 2 +- Blog.Core.Model/GlobalUsings.cs | 9 + Blog.Core.Model/HttpEnum.cs | 4 +- .../IDS4DbModels/ApplicationRole.cs | 5 +- .../IDS4DbModels/ApplicationUser.cs | 5 +- Blog.Core.Model/Logs/AuditSqlLog.cs | 6 +- Blog.Core.Model/Logs/GlobalErrorLog.cs | 6 +- Blog.Core.Model/Logs/GlobalInformationLog.cs | 6 +- Blog.Core.Model/Logs/GlobalWarningLog.cs | 6 +- Blog.Core.Model/Models/AccessTrendLog.cs | 6 +- Blog.Core.Model/Models/Advertisement.cs | 6 +- Blog.Core.Model/Models/BlogArticle.cs | 7 +- Blog.Core.Model/Models/BlogArticleComment.cs | 5 +- Blog.Core.Model/Models/Department.cs | 7 +- Blog.Core.Model/Models/GblLogAudit.cs | 6 +- Blog.Core.Model/Models/Guestbook.cs | 6 +- Blog.Core.Model/Models/Modules.cs | 6 +- Blog.Core.Model/Models/OperateLog.cs | 6 +- Blog.Core.Model/Models/PasswordLib.cs | 6 +- Blog.Core.Model/Models/Permission.cs | 7 +- Blog.Core.Model/Models/Role.cs | 6 +- .../Models/RoleModulePermission.cs | 6 +- Blog.Core.Model/Models/SplitDemo.cs | 5 +- Blog.Core.Model/Models/SysTenant.cs | 4 +- Blog.Core.Model/Models/TasksLog.cs | 6 +- Blog.Core.Model/Models/TasksQz.cs | 4 +- .../Models/Tenant/BusinessTable.cs | 6 +- .../Models/Tenant/MultiBusinessSubTable.cs | 6 +- .../Models/Tenant/MultiBusinessTable.cs | 14 +- .../Models/Tenant/SubLibraryBusinessTable.cs | 12 +- Blog.Core.Model/Models/TestModels.cs | 2 +- Blog.Core.Model/Models/Topic.cs | 7 +- Blog.Core.Model/Models/TopicDetail.cs | 6 +- Blog.Core.Model/Models/UserRole.cs | 6 +- Blog.Core.Model/Models/WeChatCompany.cs | 6 +- Blog.Core.Model/Models/WeChatConfig.cs | 6 +- Blog.Core.Model/Models/WeChatPushLog.cs | 6 +- Blog.Core.Model/Models/WeChatQR.cs | 6 +- Blog.Core.Model/Models/WeChatSub.cs | 6 +- Blog.Core.Model/Models/WeChatUploadFile.cs | 6 +- Blog.Core.Model/Models/sysUserInfo.cs | 7 +- Blog.Core.Model/PageModel.cs | 2 - .../Systems/DataBase/DatabaseOutput.cs | 4 +- Blog.Core.Model/TableModel.cs | 4 +- .../ViewModels/AdvertisementViewModels.cs | 4 +- Blog.Core.Model/ViewModels/BlogViewModels.cs | 4 +- Blog.Core.Model/ViewModels/EnumDemoDto.cs | 5 +- .../ViewModels/GuestbookViewModels.cs | 3 +- .../ViewModels/PayReturnResultModel.cs | 5 +- .../ViewModels/RootTKey/SysUserInfoDtoRoot.cs | 5 +- .../ViewModels/SidebarMenuViewModel.cs | 4 +- Blog.Core.Model/ViewModels/SysUserInfoDto.cs | 3 +- Blog.Core.Model/ViewModels/TaskInfoDto.cs | 6 +- Blog.Core.Model/ViewModels/WeChatApiDto.cs | 6 +- .../ViewModels/WeChatCardMsgDataDto.cs | 6 +- .../ViewModels/WeChatCardMsgDataOpenIDDto.cs | 6 +- .../ViewModels/WeChatCardMsgDetailDto.cs | 6 +- .../ViewModels/WeChatMenuButtonDto.cs | 6 +- Blog.Core.Model/ViewModels/WeChatMenuDto.cs | 6 +- .../ViewModels/WeChatOpenIDsDto.cs | 6 +- .../ViewModels/WeChatPushCardMsgDetailDto.cs | 6 +- .../ViewModels/WeChatPushCardMsgDto.cs | 6 +- .../WeChatPushCardMsgValueColorDto.cs | 6 +- .../ViewModels/WeChatPushLinkMsgContentDto.cs | 6 +- .../ViewModels/WeChatPushPictureContentDto.cs | 6 +- .../ViewModels/WeChatPushTestDto.cs | 6 +- .../ViewModels/WeChatPushTextContentDto.cs | 6 +- .../ViewModels/WeChatPushVideoContentDto.cs | 6 +- .../ViewModels/WeChatPushVoiceContentDto.cs | 6 +- .../ViewModels/WeChatQRActionDto.cs | 6 +- .../ViewModels/WeChatQRActionInfoDto.cs | 6 +- Blog.Core.Model/ViewModels/WeChatQRDto.cs | 6 +- .../ViewModels/WeChatResponseUserInfo.cs | 7 +- Blog.Core.Model/ViewModels/WeChatUserInfo.cs | 6 +- .../ViewModels/WeChatUserInfoOpenID.cs | 6 +- Blog.Core.Model/ViewModels/WeChatValidDto.cs | 5 +- Blog.Core.Model/ViewModels/WeChatXMLDto.cs | 5 +- Blog.Core.Repository/BASE/BaseRepository.cs | 2 +- Blog.Core.Services/PayServices.cs | 1 + Blog.Core.sln | 6 + Directory.Build.props | 1 + 123 files changed, 722 insertions(+), 765 deletions(-) create mode 100644 Blog.Core.Migrate/Attributes/DataDictionaryAttribute.cs create mode 100644 Blog.Core.Migrate/Attributes/MigrateAttribute.cs create mode 100644 Blog.Core.Migrate/Attributes/MigrateVersionAttribute.cs create mode 100644 Blog.Core.Migrate/Blog.Core.Migrate.csproj create mode 100644 Blog.Core.Migrate/Core/IMigrate.cs create mode 100644 Blog.Core.Migrate/Core/MigrateCore.cs create mode 100644 Blog.Core.Migrate/Core/TableVersion.cs rename Blog.Core.Model/{Models => Base}/RootTkey/BaseEntity.cs (93%) rename Blog.Core.Model/{Models => Base}/RootTkey/DepartmentRoot.cs (80%) rename Blog.Core.Model/{Models => Base}/RootTkey/Interface/IDeleteFilter.cs (69%) rename Blog.Core.Model/{Models => Base}/RootTkey/ModulesRoot.cs (85%) rename Blog.Core.Model/{Models => Base}/RootTkey/PermissionRoot.cs (84%) rename Blog.Core.Model/{Models => Base}/RootTkey/RoleModulePermissionRoot.cs (90%) rename Blog.Core.Model/{Models => Base}/RootTkey/RootEntityTkey.cs (81%) rename Blog.Core.Model/{Models => Base}/RootTkey/TopicDetailRoot.cs (82%) rename Blog.Core.Model/{Models => Base}/RootTkey/UserRoleRoot.cs (90%) rename Blog.Core.Model/{Models => Base}/RootTkey/sysUserInfoRoot.cs (81%) rename Blog.Core.Model/{ => Base}/Tenants/ITenantEntity.cs (79%) rename Blog.Core.Model/{ => Base}/Tenants/MultiTenantAttribute.cs (90%) rename Blog.Core.Model/{ => Base}/Tenants/TenantTypeEnum.cs (91%) create mode 100644 Blog.Core.Model/GlobalUsings.cs diff --git a/Blog.Core.Api/Blog.Core.Api.csproj b/Blog.Core.Api/Blog.Core.Api.csproj index 8bc327ab..669bab33 100644 --- a/Blog.Core.Api/Blog.Core.Api.csproj +++ b/Blog.Core.Api/Blog.Core.Api.csproj @@ -6,7 +6,6 @@ <!--<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>--> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> - <LangVersion>default</LangVersion> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> diff --git a/Blog.Core.Api/Blog.Core.Model.xml b/Blog.Core.Api/Blog.Core.Model.xml index 00b4c5be..1b1451c9 100644 --- a/Blog.Core.Api/Blog.Core.Model.xml +++ b/Blog.Core.Api/Blog.Core.Model.xml @@ -4,195 +4,63 @@ <name>Blog.Core.Model</name> </assembly> <members> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.NONE"> - <summary> - 无任何权限 - </summary> - </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.Custom"> - <summary> - 自定义权限 - </summary> - </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.MyDepart"> - <summary> - 本部门 - </summary> - </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.MyDepartAndDown"> - <summary> - 本部门及以下 - </summary> - </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.OnlySelf"> - <summary> - 仅自己 - </summary> - </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.ALL"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.Enabled"> <summary> - 所有 + 状态 <br/> + 中立字段,某些表可使用某些表不使用 </summary> </member> - <member name="T:Blog.Core.Model.IDS4DbModels.ApplicationRole"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.IsDeleted"> <summary> - 以下model 来自ids4项目,多库模式,为了调取ids4数据 - 角色表 + 中立字段,某些表可使用某些表不使用 <br/> + 逻辑上的删除,非物理删除 <br/> + 例如:单据删除并非直接删除 </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.OrderSort"> - <summary> - 排序 - </summary> - </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.Enabled"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.IsInternal"> <summary> - 是否激活 + 中立字段 <br/> + 是否内置数据 </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateId"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateId"> <summary> 创建ID </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateBy"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateBy"> <summary> 创建者 </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateTime"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateTime"> <summary> 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyId"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyId"> <summary> 修改ID </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyBy"> - <summary> - 修改者 - </summary> - </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyTime"> - <summary> - 修改时间 - </summary> - </member> - <member name="T:Blog.Core.Model.IDS4DbModels.ApplicationUser"> - <summary> - 以下model 来自ids4项目,多库模式,为了调取ids4数据 - 用户表 - </summary> - </member> - <member name="T:Blog.Core.Model.Love"> - <summary> - 这是爱 - </summary> - </member> - <member name="P:Blog.Core.Model.Love.Id"> - <summary> - id - </summary> - </member> - <member name="P:Blog.Core.Model.Love.Name"> - <summary> - 姓名 - </summary> - </member> - <member name="P:Blog.Core.Model.Love.Age"> - <summary> - 年龄 - </summary> - </member> - <member name="T:Blog.Core.Model.MessageModel`1"> - <summary> - 通用返回信息类 - </summary> - </member> - <member name="P:Blog.Core.Model.MessageModel`1.status"> - <summary> - 状态码 - </summary> - </member> - <member name="P:Blog.Core.Model.MessageModel`1.success"> - <summary> - 操作是否成功 - </summary> - </member> - <member name="P:Blog.Core.Model.MessageModel`1.msg"> - <summary> - 返回信息 - </summary> - </member> - <member name="P:Blog.Core.Model.MessageModel`1.msgDev"> - <summary> - 开发者信息 - </summary> - </member> - <member name="P:Blog.Core.Model.MessageModel`1.response"> - <summary> - 返回数据集合 - </summary> - </member> - <member name="M:Blog.Core.Model.MessageModel`1.Success(System.String)"> - <summary> - 返回成功 - </summary> - <param name="msg">消息</param> - <returns></returns> - </member> - <member name="M:Blog.Core.Model.MessageModel`1.Success(System.String,`0)"> - <summary> - 返回成功 - </summary> - <param name="msg">消息</param> - <param name="response">数据</param> - <returns></returns> - </member> - <member name="M:Blog.Core.Model.MessageModel`1.Fail(System.String)"> - <summary> - 返回失败 - </summary> - <param name="msg">消息</param> - <returns></returns> - </member> - <member name="M:Blog.Core.Model.MessageModel`1.Fail(System.String,`0)"> - <summary> - 返回失败 - </summary> - <param name="msg">消息</param> - <param name="response">数据</param> - <returns></returns> - </member> - <member name="M:Blog.Core.Model.MessageModel`1.Message(System.Boolean,System.String,`0)"> - <summary> - 返回消息 - </summary> - <param name="success">失败/成功</param> - <param name="msg">消息</param> - <param name="response">数据</param> - <returns></returns> - </member> - <member name="P:Blog.Core.Model.MessageModel.status"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyBy"> <summary> - 状态码 + 更新者 </summary> </member> - <member name="P:Blog.Core.Model.MessageModel.success"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyTime"> <summary> - 操作是否成功 + 修改日期 </summary> </member> - <member name="P:Blog.Core.Model.MessageModel.msg"> + <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.Version"> <summary> - 返回信息 + 数据版本 </summary> </member> - <member name="P:Blog.Core.Model.MessageModel.response"> + <member name="T:Blog.Core.Model.Models.RootTkey.Interface.IDeleteFilter"> <summary> - 返回数据集合 + 软删除 过滤器 </summary> </member> <member name="T:Blog.Core.Model.Models.AccessTrendLog"> @@ -837,65 +705,6 @@ 修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.Enabled"> - <summary> - 状态 <br/> - 中立字段,某些表可使用某些表不使用 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.IsDeleted"> - <summary> - 中立字段,某些表可使用某些表不使用 <br/> - 逻辑上的删除,非物理删除 <br/> - 例如:单据删除并非直接删除 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.IsInternal"> - <summary> - 中立字段 <br/> - 是否内置数据 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateId"> - <summary> - 创建ID - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateBy"> - <summary> - 创建者 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateTime"> - <summary> - 创建时间 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyId"> - <summary> - 修改ID - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyBy"> - <summary> - 更新者 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyTime"> - <summary> - 修改日期 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.Version"> - <summary> - 数据版本 - </summary> - </member> - <member name="T:Blog.Core.Model.Models.RootTkey.Interface.IDeleteFilter"> - <summary> - 软删除 过滤器 - </summary> - </member> <member name="T:Blog.Core.Model.Models.SysTenant"> <summary> 系统租户表 <br/> @@ -1239,6 +1048,11 @@ 金额 </summary> </member> + <member name="P:Blog.Core.Model.Models.MultiBusinessTable.Remark"> + <summary> + 备注(测试增加字段,多表迁移) + </summary> + </member> <member name="T:Blog.Core.Model.Models.SubLibraryBusinessTable"> <summary> 多租户-多库方案 业务表 <br/> @@ -1255,6 +1069,11 @@ 金额 </summary> </member> + <member name="P:Blog.Core.Model.Models.SubLibraryBusinessTable.Remark"> + <summary> + 备注(测试增加字段,多库迁移) + </summary> + </member> <member name="T:Blog.Core.Model.Models.Topic"> <summary> Tibug 类别 @@ -1890,6 +1709,234 @@ 角色ID </summary> </member> + <member name="T:Blog.Core.Model.Tenants.ITenantEntity"> + <summary> + 租户模型接口 + </summary> + </member> + <member name="P:Blog.Core.Model.Tenants.ITenantEntity.TenantId"> + <summary> + 租户Id + </summary> + </member> + <member name="T:Blog.Core.Model.Tenants.MultiTenantAttribute"> + <summary> + 标识 多租户 的业务表 <br/> + 默认设置是多库 <br/> + 公共表无需区分 直接使用主库 各自业务在各自库中 <br/> + </summary> + </member> + <member name="T:Blog.Core.Model.Tenants.TenantTypeEnum"> + <summary> + 租户隔离方案 + </summary> + </member> + <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Id"> + <summary> + Id隔离 + </summary> + </member> + <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Db"> + <summary> + 库隔离 + </summary> + </member> + <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Tables"> + <summary> + 表隔离 + </summary> + </member> + <member name="F:Blog.Core.Model.AuthorityScopeEnum.NONE"> + <summary> + 无任何权限 + </summary> + </member> + <member name="F:Blog.Core.Model.AuthorityScopeEnum.Custom"> + <summary> + 自定义权限 + </summary> + </member> + <member name="F:Blog.Core.Model.AuthorityScopeEnum.MyDepart"> + <summary> + 本部门 + </summary> + </member> + <member name="F:Blog.Core.Model.AuthorityScopeEnum.MyDepartAndDown"> + <summary> + 本部门及以下 + </summary> + </member> + <member name="F:Blog.Core.Model.AuthorityScopeEnum.OnlySelf"> + <summary> + 仅自己 + </summary> + </member> + <member name="F:Blog.Core.Model.AuthorityScopeEnum.ALL"> + <summary> + 所有 + </summary> + </member> + <member name="T:Blog.Core.Model.IDS4DbModels.ApplicationRole"> + <summary> + 以下model 来自ids4项目,多库模式,为了调取ids4数据 + 角色表 + </summary> + </member> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.OrderSort"> + <summary> + 排序 + </summary> + </member> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.Enabled"> + <summary> + 是否激活 + </summary> + </member> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateId"> + <summary> + 创建ID + </summary> + </member> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateBy"> + <summary> + 创建者 + </summary> + </member> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateTime"> + <summary> + 创建时间 + </summary> + </member> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyId"> + <summary> + 修改ID + </summary> + </member> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyBy"> + <summary> + 修改者 + </summary> + </member> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyTime"> + <summary> + 修改时间 + </summary> + </member> + <member name="T:Blog.Core.Model.IDS4DbModels.ApplicationUser"> + <summary> + 以下model 来自ids4项目,多库模式,为了调取ids4数据 + 用户表 + </summary> + </member> + <member name="T:Blog.Core.Model.Love"> + <summary> + 这是爱 + </summary> + </member> + <member name="P:Blog.Core.Model.Love.Id"> + <summary> + id + </summary> + </member> + <member name="P:Blog.Core.Model.Love.Name"> + <summary> + 姓名 + </summary> + </member> + <member name="P:Blog.Core.Model.Love.Age"> + <summary> + 年龄 + </summary> + </member> + <member name="T:Blog.Core.Model.MessageModel`1"> + <summary> + 通用返回信息类 + </summary> + </member> + <member name="P:Blog.Core.Model.MessageModel`1.status"> + <summary> + 状态码 + </summary> + </member> + <member name="P:Blog.Core.Model.MessageModel`1.success"> + <summary> + 操作是否成功 + </summary> + </member> + <member name="P:Blog.Core.Model.MessageModel`1.msg"> + <summary> + 返回信息 + </summary> + </member> + <member name="P:Blog.Core.Model.MessageModel`1.msgDev"> + <summary> + 开发者信息 + </summary> + </member> + <member name="P:Blog.Core.Model.MessageModel`1.response"> + <summary> + 返回数据集合 + </summary> + </member> + <member name="M:Blog.Core.Model.MessageModel`1.Success(System.String)"> + <summary> + 返回成功 + </summary> + <param name="msg">消息</param> + <returns></returns> + </member> + <member name="M:Blog.Core.Model.MessageModel`1.Success(System.String,`0)"> + <summary> + 返回成功 + </summary> + <param name="msg">消息</param> + <param name="response">数据</param> + <returns></returns> + </member> + <member name="M:Blog.Core.Model.MessageModel`1.Fail(System.String)"> + <summary> + 返回失败 + </summary> + <param name="msg">消息</param> + <returns></returns> + </member> + <member name="M:Blog.Core.Model.MessageModel`1.Fail(System.String,`0)"> + <summary> + 返回失败 + </summary> + <param name="msg">消息</param> + <param name="response">数据</param> + <returns></returns> + </member> + <member name="M:Blog.Core.Model.MessageModel`1.Message(System.Boolean,System.String,`0)"> + <summary> + 返回消息 + </summary> + <param name="success">失败/成功</param> + <param name="msg">消息</param> + <param name="response">数据</param> + <returns></returns> + </member> + <member name="P:Blog.Core.Model.MessageModel.status"> + <summary> + 状态码 + </summary> + </member> + <member name="P:Blog.Core.Model.MessageModel.success"> + <summary> + 操作是否成功 + </summary> + </member> + <member name="P:Blog.Core.Model.MessageModel.msg"> + <summary> + 返回信息 + </summary> + </member> + <member name="P:Blog.Core.Model.MessageModel.response"> + <summary> + 返回数据集合 + </summary> + </member> <member name="T:Blog.Core.Model.PageModel`1"> <summary> 通用分页信息类 @@ -1992,43 +2039,6 @@ 返回数据集 </summary> </member> - <member name="T:Blog.Core.Model.Tenants.ITenantEntity"> - <summary> - 租户模型接口 - </summary> - </member> - <member name="P:Blog.Core.Model.Tenants.ITenantEntity.TenantId"> - <summary> - 租户Id - </summary> - </member> - <member name="T:Blog.Core.Model.Tenants.MultiTenantAttribute"> - <summary> - 标识 多租户 的业务表 <br/> - 默认设置是多库 <br/> - 公共表无需区分 直接使用主库 各自业务在各自库中 <br/> - </summary> - </member> - <member name="T:Blog.Core.Model.Tenants.TenantTypeEnum"> - <summary> - 租户隔离方案 - </summary> - </member> - <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Id"> - <summary> - Id隔离 - </summary> - </member> - <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Db"> - <summary> - 库隔离 - </summary> - </member> - <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Tables"> - <summary> - 表隔离 - </summary> - </member> <member name="T:Blog.Core.Model.ViewModels.AdvertisementViewModels"> <summary> 广告类 diff --git a/Blog.Core.Api/Controllers/Systems/DataBaseController.cs b/Blog.Core.Api/Controllers/Systems/DataBaseController.cs index 1f7b3089..7c103e1e 100644 --- a/Blog.Core.Api/Controllers/Systems/DataBaseController.cs +++ b/Blog.Core.Api/Controllers/Systems/DataBaseController.cs @@ -3,9 +3,9 @@ using Blog.Core.Common.DB; using Blog.Core.Controllers; using Blog.Core.Model; +using Blog.Core.Model.Base.Tenants; using Blog.Core.Model.Models; using Blog.Core.Model.Systems.DataBase; -using Blog.Core.Model.Tenants; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/Blog.Core.Api/Controllers/Systems/DynamicCodeFirstController.cs b/Blog.Core.Api/Controllers/Systems/DynamicCodeFirstController.cs index 37c84791..5d00c67e 100644 --- a/Blog.Core.Api/Controllers/Systems/DynamicCodeFirstController.cs +++ b/Blog.Core.Api/Controllers/Systems/DynamicCodeFirstController.cs @@ -1,7 +1,7 @@ using Blog.Core.Common.DB.Extension; using Blog.Core.Controllers; using Blog.Core.Model; -using Blog.Core.Model.Models.RootTkey; +using Blog.Core.Model.Base.RootTkey; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using NetTaste; diff --git a/Blog.Core.Api/Controllers/Tenant/TenantByDbController.cs b/Blog.Core.Api/Controllers/Tenant/TenantByDbController.cs index 046f7f7b..4622b02c 100644 --- a/Blog.Core.Api/Controllers/Tenant/TenantByDbController.cs +++ b/Blog.Core.Api/Controllers/Tenant/TenantByDbController.cs @@ -3,6 +3,7 @@ using Blog.Core.IServices.BASE; using Blog.Core.Model; using Blog.Core.Model.Models; +using Blog.Core.Model.Models.Tenant; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/Blog.Core.Api/Controllers/Tenant/TenantByIdController.cs b/Blog.Core.Api/Controllers/Tenant/TenantByIdController.cs index b015bc6d..06767ed4 100644 --- a/Blog.Core.Api/Controllers/Tenant/TenantByIdController.cs +++ b/Blog.Core.Api/Controllers/Tenant/TenantByIdController.cs @@ -3,6 +3,7 @@ using Blog.Core.IServices.BASE; using Blog.Core.Model; using Blog.Core.Model.Models; +using Blog.Core.Model.Models.Tenant; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/Blog.Core.Api/Controllers/Tenant/TenantByTableController.cs b/Blog.Core.Api/Controllers/Tenant/TenantByTableController.cs index 6c0b110e..b8c115ed 100644 --- a/Blog.Core.Api/Controllers/Tenant/TenantByTableController.cs +++ b/Blog.Core.Api/Controllers/Tenant/TenantByTableController.cs @@ -3,6 +3,7 @@ using Blog.Core.IServices.BASE; using Blog.Core.Model; using Blog.Core.Model.Models; +using Blog.Core.Model.Models.Tenant; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/Blog.Core.Common/Blog.Core.Common.csproj b/Blog.Core.Common/Blog.Core.Common.csproj index d147fce9..0fe60252 100644 --- a/Blog.Core.Common/Blog.Core.Common.csproj +++ b/Blog.Core.Common/Blog.Core.Common.csproj @@ -44,6 +44,7 @@ </ItemGroup> <ItemGroup> + <ProjectReference Include="..\Blog.Core.Migrate\Blog.Core.Migrate.csproj" /> <ProjectReference Include="..\Blog.Core.Model\Blog.Core.Model.csproj" /> <ProjectReference Include="..\Blog.Core.Serilog.Es\Blog.Core.Serilog.Es.csproj" /> <ProjectReference Include="..\Ocelot.Provider.Nacos\Ocelot.Provider.Nacos.csproj" /> diff --git a/Blog.Core.Common/DB/Aop/SqlsugarAop.cs b/Blog.Core.Common/DB/Aop/SqlsugarAop.cs index 7d2031ad..7e5d86bd 100644 --- a/Blog.Core.Common/DB/Aop/SqlsugarAop.cs +++ b/Blog.Core.Common/DB/Aop/SqlsugarAop.cs @@ -1,5 +1,3 @@ -using Blog.Core.Model.Models.RootTkey; -using Blog.Core.Model.Tenants; using SqlSugar; using StackExchange.Profiling; using System; @@ -7,6 +5,8 @@ using Blog.Core.Common.LogHelper; using Blog.Core.Common.Utility; using Blog.Core.Model; +using Blog.Core.Model.Base.RootTkey; +using Blog.Core.Model.Base.Tenants; namespace Blog.Core.Common.DB.Aop; diff --git a/Blog.Core.Common/DB/EntityUtility.cs b/Blog.Core.Common/DB/EntityUtility.cs index f997a1eb..423186ed 100644 --- a/Blog.Core.Common/DB/EntityUtility.cs +++ b/Blog.Core.Common/DB/EntityUtility.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Linq; using System.Reflection; +using Blog.Core.Model.Base.RootTkey; namespace Blog.Core.Common.DB; diff --git a/Blog.Core.Common/DB/RepositorySetting.cs b/Blog.Core.Common/DB/RepositorySetting.cs index bfca7174..ea5b026a 100644 --- a/Blog.Core.Common/DB/RepositorySetting.cs +++ b/Blog.Core.Common/DB/RepositorySetting.cs @@ -1,10 +1,10 @@ -using Blog.Core.Model.Models.RootTkey; -using Blog.Core.Model.Models.RootTkey.Interface; -using Blog.Core.Model.Tenants; -using SqlSugar; +using SqlSugar; using System; using System.Collections.Generic; using System.Linq; +using Blog.Core.Model.Base.RootTkey; +using Blog.Core.Model.Base.RootTkey.Interface; +using Blog.Core.Model.Base.Tenants; namespace Blog.Core.Common.DB; diff --git a/Blog.Core.Common/DB/TenantUtil.cs b/Blog.Core.Common/DB/TenantUtil.cs index 8395c271..e4aae11d 100644 --- a/Blog.Core.Common/DB/TenantUtil.cs +++ b/Blog.Core.Common/DB/TenantUtil.cs @@ -3,8 +3,8 @@ using System.IO; using System.Linq; using System.Reflection; +using Blog.Core.Model.Base.Tenants; using Blog.Core.Model.Models; -using Blog.Core.Model.Tenants; using SqlSugar; namespace Blog.Core.Common.DB; diff --git a/Blog.Core.Common/Seed/DBSeed.cs b/Blog.Core.Common/Seed/DBSeed.cs index 29222802..4435914d 100644 --- a/Blog.Core.Common/Seed/DBSeed.cs +++ b/Blog.Core.Common/Seed/DBSeed.cs @@ -2,7 +2,6 @@ using Blog.Core.Common.Extensions; using Blog.Core.Common.Helper; using Blog.Core.Model.Models; -using Blog.Core.Model.Tenants; using Magicodes.ExporterAndImporter.Excel; using Newtonsoft.Json; using SqlSugar; @@ -10,46 +9,50 @@ using System.Reflection; using System.Text; using Blog.Core.Common.Const; +using Blog.Core.Migrate.Core; +using Blog.Core.Model.Base.Tenants; using Microsoft.Data.SqlClient; +using Serilog; namespace Blog.Core.Common.Seed { public class DBSeed { - private static string SeedDataFolder = "BlogCore.Data.json/{0}.tsv"; + private static string _seedDataFolder = "BlogCore.Data.json/{0}.tsv"; /// <summary> /// 异步添加种子数据 /// </summary> /// <param name="myContext"></param> - /// <param name="WebRootPath"></param> + /// <param name="webRootPath"></param> /// <returns></returns> - public static async Task SeedAsync(MyContext myContext, string WebRootPath) + public static async Task SeedAsync(MyContext myContext, string webRootPath) { + var db = myContext.Db; try { - if (string.IsNullOrEmpty(WebRootPath)) + if (string.IsNullOrEmpty(webRootPath)) { throw new Exception("获取wwwroot路径时,异常!"); } - SeedDataFolder = Path.Combine(WebRootPath, SeedDataFolder); + _seedDataFolder = Path.Combine(webRootPath, _seedDataFolder); + + Log.Information("===============Blog.Core DataBase Set=================="); + Log.Information("Master DB ConId: {ConfigId}", myContext.Db.CurrentConnectionConfig.ConfigId); + Log.Information("Master DB Type: {DbType}", myContext.Db.CurrentConnectionConfig.DbType); + Log.Information("Master DB ConnectString: {ConnectionString}", myContext.Db.CurrentConnectionConfig.ConnectionString); - Console.WriteLine("************ Blog.Core DataBase Set *****************"); - Console.WriteLine($"Master DB ConId: {myContext.Db.CurrentConnectionConfig.ConfigId}"); - Console.WriteLine($"Master DB Type: {myContext.Db.CurrentConnectionConfig.DbType}"); - Console.WriteLine($"Master DB ConnectString: {myContext.Db.CurrentConnectionConfig.ConnectionString}"); - Console.WriteLine(); if (BaseDBConfig.MainConfig.SlaveConnectionConfigs.AnyNoException()) { var index = 0; BaseDBConfig.MainConfig.SlaveConnectionConfigs.ForEach(m => { index++; - Console.WriteLine($"Slave{index} DB HitRate: {m.HitRate}"); - Console.WriteLine($"Slave{index} DB ConnectString: {m.ConnectionString}"); - Console.WriteLine($"--------------------------------------"); + Log.Information("Slave{Index} DB HitRate: {ObjHitRate}", index, m.HitRate); + Log.Information("Slave{Index} DB ConnectString: {ObjConnectionString}", index, m.ConnectionString); + Log.Information($"--------------------------------------"); }); } else if (BaseDBConfig.ReuseConfigs.AnyNoException()) @@ -58,36 +61,34 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) BaseDBConfig.ReuseConfigs.ForEach(m => { index++; - Console.WriteLine($"Reuse{index} DB ID: {m.ConfigId}"); - Console.WriteLine($"Reuse{index} DB Type: {m.DbType}"); - Console.WriteLine($"Reuse{index} DB ConnectString: {m.ConnectionString}"); - Console.WriteLine($"--------------------------------------"); + Log.Information("Reuse{Index} DB ID: {ObjConfigId}", index, m.ConfigId); + Log.Information("Reuse{Index} DB Type: {ObjDbType}", index, m.DbType); + Log.Information("Reuse{Index} DB ConnectString: {ObjConnectionString}", index, m.ConnectionString); + Log.Information($"--------------------------------------"); }); } - Console.WriteLine(); - // 创建数据库 - Console.WriteLine($"Create Database(The Db Id:{MyContext.ConnId})..."); + Log.Information("Create Database(The Db Id:{ConnId})...", MyContext.ConnId); - if (MyContext.DbType != SqlSugar.DbType.Oracle && MyContext.DbType != SqlSugar.DbType.Dm) + if (MyContext.DbType != DbType.Oracle && MyContext.DbType != DbType.Dm) { myContext.Db.DbMaintenance.CreateDatabase(); SqlConnection.ClearAllPools(); - ConsoleHelper.WriteSuccessLine($"Database created successfully!"); + Log.Information($"Database created successfully!"); } else { //Oracle 数据库不支持该操作 - ConsoleHelper.WriteSuccessLine($"Oracle 数据库不支持该操作,可手动创建Oracle/Dm数据库!"); + Log.Warning($"Oracle 数据库不支持该操作,可手动创建Oracle/Dm数据库!"); } // 创建数据库表,遍历指定命名空间下的class, // 注意不要把其他命名空间下的也添加进来。 - Console.WriteLine("Create Tables..."); + Log.Information("Create Tables..."); var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory; - var referencedAssemblies = System.IO.Directory.GetFiles(path, "Blog.Core.Model.dll") + var referencedAssemblies = Directory.GetFiles(path, "Blog.Core.Model.dll") .Select(Assembly.LoadFrom).ToArray(); var modelTypes = referencedAssemblies .SelectMany(a => a.DefinedTypes) @@ -95,23 +96,13 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) .Where(x => x.IsClass && x.Namespace is "Blog.Core.Model.Models") .Where(s => !s.IsDefined(typeof(MultiTenantAttribute), false)) .ToList(); - modelTypes.ForEach(t => - { - // 这里只支持添加表,不支持删除 - // 如果想要删除,数据库直接右键删除,或者联系SqlSugar作者; - if (!myContext.Db.DbMaintenance.IsAnyTable(t.Name)) - { - Console.WriteLine(t.Name); - myContext.Db.CodeFirst.SplitTables().InitTables(t); - } - }); - ConsoleHelper.WriteSuccessLine($"Tables created successfully!"); - Console.WriteLine(); + await MigrateCore.MigrateAsync(db, modelTypes.ToArray()); + Log.Information($"Tables created successfully!"); - if (AppSettings.app(new string[] { "AppSettings", "SeedDBDataEnabled" }).ObjToBool()) + if (AppSettings.app("AppSettings", "SeedDBDataEnabled").ObjToBool()) { JsonSerializerSettings setting = new JsonSerializerSettings(); - JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() => + JsonConvert.DefaultSettings = () => { //日期类型默认格式化处理 setting.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat; @@ -124,9 +115,9 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) //setting.Converters.Add(new BoolConvert("是,否")); return setting; - }); + }; - Console.WriteLine($"Seeding database data (The Db Id:{MyContext.ConnId})..."); + Log.Information("Seeding database data (The Db Id:{ConnId})...", MyContext.ConnId); var importer = new ExcelImporter(); @@ -136,12 +127,12 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) { myContext.GetEntityDB<BlogArticle>().InsertRange( JsonHelper.ParseFormByJson<List<BlogArticle>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "BlogArticle"), Encoding.UTF8))); - Console.WriteLine("Table:BlogArticle created success!"); + FileHelper.ReadFile(string.Format(_seedDataFolder, "BlogArticle"), Encoding.UTF8))); + Log.Information("Table:BlogArticle created success!"); } else { - Console.WriteLine("Table:BlogArticle already exists..."); + Log.Information("Table:BlogArticle already exists..."); } #endregion @@ -152,14 +143,14 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<Modules>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<Modules>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "Modules"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "Modules"), Encoding.UTF8), setting); myContext.GetEntityDB<Modules>().InsertRange(data); - Console.WriteLine("Table:Modules created success!"); + Log.Information("Table:Modules created success!"); } else { - Console.WriteLine("Table:Modules already exists..."); + Log.Information("Table:Modules already exists..."); } #endregion @@ -170,14 +161,14 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<Permission>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<Permission>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "Permission"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "Permission"), Encoding.UTF8), setting); myContext.GetEntityDB<Permission>().InsertRange(data); - Console.WriteLine("Table:Permission created success!"); + Log.Information("Table:Permission created success!"); } else { - Console.WriteLine("Table:Permission already exists..."); + Log.Information("Table:Permission already exists..."); } #endregion @@ -188,17 +179,17 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<Role>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<Role>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "Role"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "Role"), Encoding.UTF8), setting); //using var stream = new FileStream(Path.Combine(WebRootPath, "BlogCore.Data.excel", "Role.xlsx"), FileMode.Open); //var result = await importer.Import<Role>(stream); //var data = result.Data.ToList(); myContext.GetEntityDB<Role>().InsertRange(data); - Console.WriteLine("Table:Role created success!"); + Log.Information("Table:Role created success!"); } else { - Console.WriteLine("Table:Role already exists..."); + Log.Information("Table:Role already exists..."); } #endregion @@ -209,15 +200,15 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<RoleModulePermission>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<RoleModulePermission>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "RoleModulePermission"), Encoding.UTF8), + FileHelper.ReadFile(string.Format(_seedDataFolder, "RoleModulePermission"), Encoding.UTF8), setting); myContext.GetEntityDB<RoleModulePermission>().InsertRange(data); - Console.WriteLine("Table:RoleModulePermission created success!"); + Log.Information("Table:RoleModulePermission created success!"); } else { - Console.WriteLine("Table:RoleModulePermission already exists..."); + Log.Information("Table:RoleModulePermission already exists..."); } #endregion @@ -228,14 +219,14 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<Topic>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<Topic>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "Topic"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "Topic"), Encoding.UTF8), setting); myContext.GetEntityDB<Topic>().InsertRange(data); - Console.WriteLine("Table:Topic created success!"); + Log.Information("Table:Topic created success!"); } else { - Console.WriteLine("Table:Topic already exists..."); + Log.Information("Table:Topic already exists..."); } #endregion @@ -246,14 +237,14 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<TopicDetail>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<TopicDetail>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "TopicDetail"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "TopicDetail"), Encoding.UTF8), setting); myContext.GetEntityDB<TopicDetail>().InsertRange(data); - Console.WriteLine("Table:TopicDetail created success!"); + Log.Information("Table:TopicDetail created success!"); } else { - Console.WriteLine("Table:TopicDetail already exists..."); + Log.Information("Table:TopicDetail already exists..."); } #endregion @@ -264,14 +255,14 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<UserRole>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<UserRole>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "UserRole"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "UserRole"), Encoding.UTF8), setting); myContext.GetEntityDB<UserRole>().InsertRange(data); - Console.WriteLine("Table:UserRole created success!"); + Log.Information("Table:UserRole created success!"); } else { - Console.WriteLine("Table:UserRole already exists..."); + Log.Information("Table:UserRole already exists..."); } #endregion @@ -282,14 +273,14 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<SysUserInfo>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<SysUserInfo>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "sysUserInfo"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "sysUserInfo"), Encoding.UTF8), setting); myContext.GetEntityDB<SysUserInfo>().InsertRange(data); - Console.WriteLine("Table:sysUserInfo created success!"); + Log.Information("Table:sysUserInfo created success!"); } else { - Console.WriteLine("Table:sysUserInfo already exists..."); + Log.Information("Table:sysUserInfo already exists..."); } #endregion @@ -300,14 +291,14 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<TasksQz>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<TasksQz>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "TasksQz"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "TasksQz"), Encoding.UTF8), setting); myContext.GetEntityDB<TasksQz>().InsertRange(data); - Console.WriteLine("Table:TasksQz created success!"); + Log.Information("Table:TasksQz created success!"); } else { - Console.WriteLine("Table:TasksQz already exists..."); + Log.Information("Table:TasksQz already exists..."); } #endregion @@ -316,11 +307,11 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<TasksLog>().AnyAsync()) { - Console.WriteLine("Table:TasksLog created success!"); + Log.Information("Table:TasksLog created success!"); } else { - Console.WriteLine("Table:TasksLog already exists..."); + Log.Information("Table:TasksLog already exists..."); } #endregion @@ -330,14 +321,14 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) if (!await myContext.Db.Queryable<Department>().AnyAsync()) { var data = JsonConvert.DeserializeObject<List<Department>>( - FileHelper.ReadFile(string.Format(SeedDataFolder, "Department"), Encoding.UTF8), setting); + FileHelper.ReadFile(string.Format(_seedDataFolder, "Department"), Encoding.UTF8), setting); myContext.GetEntityDB<Department>().InsertRange(data); - Console.WriteLine("Table:Department created success!"); + Log.Information("Table:Department created success!"); } else { - Console.WriteLine("Table:Department already exists..."); + Log.Information("Table:Department already exists..."); } #endregion @@ -345,10 +336,8 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) //种子初始化 await SeedDataAsync(myContext.Db); - ConsoleHelper.WriteSuccessLine($"Done seeding database!"); + Log.Information($"Done seeding database!"); } - - Console.WriteLine(); } catch (Exception ex) { @@ -362,7 +351,7 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath) /// <summary> /// 种子初始化数据 /// </summary> - /// <param name="myContext"></param> + /// <param name="db"></param> /// <returns></returns> private static async Task SeedDataAsync(ISqlSugarClient db) { @@ -385,12 +374,13 @@ private static async Task SeedDataAsync(ISqlSugarClient db) } return false; - }); + }).ToList(); if (!seedDataTypes.Any()) return; foreach (var seedType in seedDataTypes) { dynamic instance = Activator.CreateInstance(seedType); + if (instance is null) continue; //初始化数据 { var seedData = instance.InitSeedData(); @@ -402,7 +392,7 @@ private static async Task SeedDataAsync(ISqlSugarClient db) if (!await db.Queryable(entity.DbTableName, "").AnyAsync()) { await db.Insertable(Enumerable.ToList(seedData)).ExecuteCommandAsync(); - Console.WriteLine($"Table:{entity.DbTableName} init success!"); + Log.Information("Table:{EntityDbTableName} init success!", entity.DbTableName); } } } @@ -416,7 +406,7 @@ private static async Task SeedDataAsync(ISqlSugarClient db) var entity = db.EntityMaintenance.GetEntityInfo(entityType); await db.Storageable(Enumerable.ToList(seedData)).ExecuteCommandAsync(); - Console.WriteLine($"Table:{entity.DbTableName} seedData success!"); + Log.Information("Table:{EntityDbTableName} seedData success!", entity.DbTableName); } } @@ -431,57 +421,35 @@ private static async Task SeedDataAsync(ISqlSugarClient db) /// 迁移日志数据库 /// </summary> /// <returns></returns> - public static void MigrationLogs(MyContext myContext) + public static async Task MigrationLogsAsync(MyContext myContext) { // 创建数据库表,遍历指定命名空间下的class, // 注意不要把其他命名空间下的也添加进来。 - Console.WriteLine("Create Log Tables..."); + Log.Information("Create Log Tables..."); if (!myContext.Db.IsAnyConnection(SqlSugarConst.LogConfigId.ToLower())) { throw new ApplicationException("未配置日志数据库,请在appsettings.json中DBS节点中配置"); } var logDb = myContext.Db.GetConnection(SqlSugarConst.LogConfigId.ToLower()); - Console.WriteLine($"Create log Database(The Db Id:{SqlSugarConst.LogConfigId.ToLower()})..."); + Log.Information("Create log Database(The Db Id:{Lower})...", SqlSugarConst.LogConfigId.ToLower()); logDb.DbMaintenance.CreateDatabase(); - ConsoleHelper.WriteSuccessLine($"Log Database created successfully!"); + Log.Information($"Log Database created successfully!"); var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory; - var referencedAssemblies = System.IO.Directory.GetFiles(path, "Blog.Core.Model.dll") + var referencedAssemblies = Directory.GetFiles(path, "Blog.Core.Model.dll") .Select(Assembly.LoadFrom).ToArray(); var modelTypes = referencedAssemblies .SelectMany(a => a.DefinedTypes) .Select(type => type.AsType()) .Where(x => x.IsClass && x.Namespace != null && x.Namespace.StartsWith("Blog.Core.Model.Logs")) .ToList(); - Stopwatch sw = Stopwatch.StartNew(); - - var tables = logDb.DbMaintenance.GetTableInfoList(); - - modelTypes.ForEach(t => - { - // 这里只支持添加修改表,不支持删除 - // 如果想要删除,数据库直接右键删除,或者联系SqlSugar作者; - if (!tables.Any(s => s.Name.Contains(t.Name))) - { - Console.WriteLine(t.Name); - if (t.GetCustomAttribute<SplitTableAttribute>() != null) - { - logDb.CodeFirst.SplitTables().InitTables(t); - } - else - { - logDb.CodeFirst.InitTables(t); - } - } - }); - + var sw = Stopwatch.StartNew(); + await MigrateCore.MigrateAsync(logDb, modelTypes.ToArray()); sw.Stop(); - $"Log Tables created successfully! {sw.ElapsedMilliseconds}ms".WriteSuccessLine(); - Console.WriteLine(); + Log.Information("Log Tables created successfully! {SwElapsedMilliseconds}ms", sw.ElapsedMilliseconds); } - /// <summary> /// 初始化 多租户 /// </summary> @@ -493,10 +461,10 @@ public static async Task TenantSeedAsync(MyContext myContext) .ToListAsync(); if (tenants.Any()) { - Console.WriteLine($@"Init Multi Tenant Db"); + Log.Information($@"Init Multi Tenant Db"); foreach (var tenant in tenants) { - Console.WriteLine($@"Init Multi Tenant Db : {tenant.ConfigId}/{tenant.Name}"); + Log.Information("Init Multi Tenant Db : {TenantConfigId}/{TenantName}", tenant.ConfigId, tenant.Name); await InitTenantSeedAsync(myContext.Db.AsTenant(), tenant.GetConnectionConfig()); } } @@ -513,7 +481,7 @@ public static async Task TenantSeedAsync(MyContext myContext) private static async Task InitTenantSeedAsync(MyContext myContext, List<SysTenant> tenants) { - ConsoleHelper.WriteInfoLine($"Init Multi Tenant Tables : {myContext.Db.CurrentConnectionConfig.ConfigId}"); + Log.Information("Init Multi Tenant Tables : {ConfigId}", myContext.Db.CurrentConnectionConfig.ConfigId); // 获取所有实体表-初始化租户业务表 var entityTypes = TenantUtil.GetTenantEntityTypes(TenantTypeEnum.Tables); @@ -521,22 +489,14 @@ private static async Task InitTenantSeedAsync(MyContext myContext, List<SysTenan foreach (var sysTenant in tenants) { - foreach (var entityType in entityTypes) - { - myContext.Db.CodeFirst - .As(entityType, entityType.GetTenantTableName(myContext.Db, sysTenant)) - .InitTables(entityType); - - Console.WriteLine($@"Init Tables:{entityType.GetTenantTableName(myContext.Db, sysTenant)}"); - } - myContext.Db.SetTenantTable(sysTenant.Id.ToString()); + await MigrateCore.MigrateAsync(myContext.Db, entityTypes.ToArray()); + //多租户初始化种子数据 await TenantSeedDataAsync(myContext.Db, TenantTypeEnum.Tables); } - ConsoleHelper.WriteSuccessLine( - $"Init Multi Tenant Tables : {myContext.Db.CurrentConnectionConfig.ConfigId} created successfully!"); + Log.Information("Init Multi Tenant Tables : {ConfigId} created successfully!", myContext.Db.CurrentConnectionConfig.ConfigId); } #endregion @@ -557,23 +517,14 @@ public static async Task InitTenantSeedAsync(ITenant itenant, ConnectionConfig c var db = itenant.GetConnectionScope(config.ConfigId); db.DbMaintenance.CreateDatabase(); - ConsoleHelper.WriteSuccessLine($"Init Multi Tenant Db : {config.ConfigId} Database created successfully!"); - - Console.WriteLine($@"Init Multi Tenant Db : {config.ConfigId} Create Tables"); + Log.Information("Init Multi Tenant Db : {ConfigConfigId} Database created successfully!", config.ConfigId); + Log.Information("Init Multi Tenant Db : {ConfigConfigId} Create Tables", config.ConfigId); // 获取所有实体表-初始化租户业务表 var entityTypes = TenantUtil.GetTenantEntityTypes(TenantTypeEnum.Db); if (!entityTypes.Any()) return; - foreach (var entityType in entityTypes) - { - var splitTable = entityType.GetCustomAttribute<SplitTableAttribute>(); - if (splitTable == null) - db.CodeFirst.InitTables(entityType); - else - db.CodeFirst.SplitTables().InitTables(entityType); - Console.WriteLine(entityType.Name); - } + await MigrateCore.MigrateAsync(db, entityTypes.ToArray()); //多租户初始化种子数据 await TenantSeedDataAsync(db, TenantTypeEnum.Db); @@ -599,11 +550,12 @@ private static async Task TenantSeedDataAsync(ISqlSugarClient db, TenantTypeEnum var eType = esd.GenericTypeArguments[0]; return eType.IsTenantEntity(tenantType); - }); + }).ToList(); if (!seedDataTypes.Any()) return; foreach (var seedType in seedDataTypes) { dynamic instance = Activator.CreateInstance(seedType); + if (instance is null) continue; //初始化数据 { var seedData = instance.InitSeedData(); @@ -615,7 +567,7 @@ private static async Task TenantSeedDataAsync(ISqlSugarClient db, TenantTypeEnum if (!await db.Queryable(entity.DbTableName, "").AnyAsync()) { await db.Insertable(Enumerable.ToList(seedData)).ExecuteCommandAsync(); - Console.WriteLine($"Table:{entity.DbTableName} init success!"); + Log.Information("Table:{EntityDbTableName} init success!", entity.DbTableName); } } } @@ -629,7 +581,7 @@ private static async Task TenantSeedDataAsync(ISqlSugarClient db, TenantTypeEnum var entity = db.EntityMaintenance.GetEntityInfo(entityType); await db.Storageable(Enumerable.ToList(seedData)).ExecuteCommandAsync(); - Console.WriteLine($"Table:{entity.DbTableName} seedData success!"); + Log.Information("Table:{EntityDbTableName} seedData success!", entity.DbTableName); } } diff --git a/Blog.Core.Common/Seed/SeedData/BusinessDataSeedData.cs b/Blog.Core.Common/Seed/SeedData/BusinessDataSeedData.cs index 361cd725..8edf4e2b 100644 --- a/Blog.Core.Common/Seed/SeedData/BusinessDataSeedData.cs +++ b/Blog.Core.Common/Seed/SeedData/BusinessDataSeedData.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Blog.Core.Model.Models; +using Blog.Core.Model.Models.Tenant; using SqlSugar; namespace Blog.Core.Common.Seed.SeedData; diff --git a/Blog.Core.Common/Seed/SeedData/MultiBusinessDataSeedData.cs b/Blog.Core.Common/Seed/SeedData/MultiBusinessDataSeedData.cs index 4ca1a7dd..2ef264a1 100644 --- a/Blog.Core.Common/Seed/SeedData/MultiBusinessDataSeedData.cs +++ b/Blog.Core.Common/Seed/SeedData/MultiBusinessDataSeedData.cs @@ -2,6 +2,7 @@ using SqlSugar; using System.Collections.Generic; using System.Threading.Tasks; +using Blog.Core.Model.Models.Tenant; namespace Blog.Core.Common.Seed.SeedData; diff --git a/Blog.Core.Common/Seed/SeedData/MultiBusinessSubDataSeedData.cs b/Blog.Core.Common/Seed/SeedData/MultiBusinessSubDataSeedData.cs index e73d4603..26dce8c7 100644 --- a/Blog.Core.Common/Seed/SeedData/MultiBusinessSubDataSeedData.cs +++ b/Blog.Core.Common/Seed/SeedData/MultiBusinessSubDataSeedData.cs @@ -2,6 +2,7 @@ using SqlSugar; using System.Collections.Generic; using System.Threading.Tasks; +using Blog.Core.Model.Models.Tenant; namespace Blog.Core.Common.Seed.SeedData; diff --git a/Blog.Core.Common/Seed/SeedData/SubBusinessDataSeedData.cs b/Blog.Core.Common/Seed/SeedData/SubBusinessDataSeedData.cs index 3d7b8937..887f1cde 100644 --- a/Blog.Core.Common/Seed/SeedData/SubBusinessDataSeedData.cs +++ b/Blog.Core.Common/Seed/SeedData/SubBusinessDataSeedData.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Blog.Core.Common.Utility; +using Blog.Core.Model.Models.Tenant; namespace Blog.Core.Common.Seed.SeedData; diff --git a/Blog.Core.Common/Seed/SeedData/TenantSeedData.cs b/Blog.Core.Common/Seed/SeedData/TenantSeedData.cs index f33f83b2..8e53a280 100644 --- a/Blog.Core.Common/Seed/SeedData/TenantSeedData.cs +++ b/Blog.Core.Common/Seed/SeedData/TenantSeedData.cs @@ -3,8 +3,8 @@ using System.IO; using System.Threading.Tasks; using Blog.Core.Common.DB; +using Blog.Core.Model.Base.Tenants; using Blog.Core.Model.Models; -using Blog.Core.Model.Tenants; using SqlSugar; namespace Blog.Core.Common.Seed.SeedData; diff --git a/Blog.Core.Extensions/HostedService/SeedDataHostedService.cs b/Blog.Core.Extensions/HostedService/SeedDataHostedService.cs index e1da3d69..bbb6f75a 100644 --- a/Blog.Core.Extensions/HostedService/SeedDataHostedService.cs +++ b/Blog.Core.Extensions/HostedService/SeedDataHostedService.cs @@ -40,7 +40,7 @@ private async Task DoWork() await DBSeed.SeedAsync(_myContext, _webRootPath); //日志 - DBSeed.MigrationLogs(_myContext); + await DBSeed.MigrationLogsAsync(_myContext); //多租户 同步 await DBSeed.TenantSeedAsync(_myContext); diff --git a/Blog.Core.IServices/IPayServices.cs b/Blog.Core.IServices/IPayServices.cs index 712ada39..ba439eea 100644 --- a/Blog.Core.IServices/IPayServices.cs +++ b/Blog.Core.IServices/IPayServices.cs @@ -3,6 +3,7 @@ using Blog.Core.Model; using Blog.Core.Model.ViewModels; using System.Threading.Tasks; +using Blog.Core.Model.Base.RootTkey; namespace Blog.Core.IServices { diff --git a/Blog.Core.Migrate/Attributes/DataDictionaryAttribute.cs b/Blog.Core.Migrate/Attributes/DataDictionaryAttribute.cs new file mode 100644 index 00000000..8acbc0cc --- /dev/null +++ b/Blog.Core.Migrate/Attributes/DataDictionaryAttribute.cs @@ -0,0 +1,13 @@ +namespace Blog.Core.Migrate.Attributes; + +/// <summary> +/// 数据字典 <br /> +/// 程序内置Code和Name +/// 例如 <br /> +/// SO:销售订单<br /> +/// 1:男 +/// </summary> +[AttributeUsage(AttributeTargets.Enum)] +public class DataDictionaryAttribute : Attribute +{ +} \ No newline at end of file diff --git a/Blog.Core.Migrate/Attributes/MigrateAttribute.cs b/Blog.Core.Migrate/Attributes/MigrateAttribute.cs new file mode 100644 index 00000000..b66f4ff5 --- /dev/null +++ b/Blog.Core.Migrate/Attributes/MigrateAttribute.cs @@ -0,0 +1,13 @@ +namespace Blog.Core.Migrate.Attributes; + +/// <summary> +/// 迁移 +/// </summary> +[AttributeUsage(AttributeTargets.Class)] +public class MigrateAttribute : Attribute +{ + /// <summary> + /// 是否开启迁移 + /// </summary> + public bool Enable { get; set; } = true; +} \ No newline at end of file diff --git a/Blog.Core.Migrate/Attributes/MigrateVersionAttribute.cs b/Blog.Core.Migrate/Attributes/MigrateVersionAttribute.cs new file mode 100644 index 00000000..80ed2467 --- /dev/null +++ b/Blog.Core.Migrate/Attributes/MigrateVersionAttribute.cs @@ -0,0 +1,21 @@ +namespace Blog.Core.Migrate.Attributes; + +/// <summary> +/// 标记版本 <br /> +/// 提高CodeFirst的性能 不必要做性能牺牲 <br /> +/// 修改实体的字段、特性、索引等 <br /> +/// 一定要修改版本号!!! <br /> +/// 一定要修改版本号!!! <br /> +/// 一定要修改版本号!!! <br /> +/// 否则不会主动修改 +/// </summary> +[AttributeUsage(AttributeTargets.Class)] +public class MigrateVersionAttribute : Attribute +{ + public MigrateVersionAttribute(string version) + { + Version = Version.Parse(version); + } + + public Version Version { get; set; } +} \ No newline at end of file diff --git a/Blog.Core.Migrate/Blog.Core.Migrate.csproj b/Blog.Core.Migrate/Blog.Core.Migrate.csproj new file mode 100644 index 00000000..54273772 --- /dev/null +++ b/Blog.Core.Migrate/Blog.Core.Migrate.csproj @@ -0,0 +1,11 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + </PropertyGroup> + + <ItemGroup> + <PackageReference Include="Serilog" Version="3.1.1" /> + <PackageReference Include="SqlSugarCore" Version="5.1.4.158" /> + </ItemGroup> + +</Project> diff --git a/Blog.Core.Migrate/Core/IMigrate.cs b/Blog.Core.Migrate/Core/IMigrate.cs new file mode 100644 index 00000000..36f461e2 --- /dev/null +++ b/Blog.Core.Migrate/Core/IMigrate.cs @@ -0,0 +1,13 @@ +using SqlSugar; + +namespace Blog.Core.Migrate.Core; + +public interface IMigrate<T> +{ + ISqlSugarClient Orm { get; set; } + string TableName { get; set; } + DbType DbType { get; set; } + Version Version { get; set; } + + void Execution(); +} \ No newline at end of file diff --git a/Blog.Core.Migrate/Core/MigrateCore.cs b/Blog.Core.Migrate/Core/MigrateCore.cs new file mode 100644 index 00000000..5334ca83 --- /dev/null +++ b/Blog.Core.Migrate/Core/MigrateCore.cs @@ -0,0 +1,99 @@ +using System.Reflection; +using Blog.Core.Migrate.Attributes; +using Serilog; +using SqlSugar; + +namespace Blog.Core.Migrate.Core; + +public static class MigrateCore +{ + private static async Task<Dictionary<string, string>> GetTableVersionsAsync(ISqlSugarClient db) + { + if (!db.DbMaintenance.IsAnyTable(nameof(TableVersion))) db.CodeFirst.InitTables(typeof(TableVersion)); + return (await db.Queryable<TableVersion>().ToListAsync()).ToDictionary(s => s.TableName, s => s.Version); + } + + public static MigrateVersionAttribute GetMigrateVersion<T>() + { + return GetMigrateVersion(typeof(T)); + } + + public static MigrateVersionAttribute GetMigrateVersion(Type type) + { + return type.GetCustomAttribute<MigrateVersionAttribute>(); + } + + public static bool IsSplitTable(Type type) + { + return type.GetCustomAttribute<SplitTableAttribute>() != null; + } + + public static bool IsMigrate(Type type) + { + var ma = type.GetCustomAttribute<MigrateAttribute>(); + return ma == null || ma.Enable; + } + + public static void Migrate(ISqlSugarClient context, Type type) + { + if (!IsMigrate(type)) return; + + if (IsSplitTable(type)) + context.CodeFirst.SplitTables().InitTables(type); + else + context.CodeFirst.InitTables(type); + } + + public static async Task MigrateAsync(ISqlSugarClient context, IEnumerable<Type> types) + { + var oldVersions = await GetTableVersionsAsync(context); + + foreach (var type in types) + { + if (!IsMigrate(type)) continue; + + var version = GetMigrateVersion(type); + if (version == null) + { + //没有标记版本号的表 只会初始化 不会迁移 + //表不存在初始化 + if (!context.DbMaintenance.IsAnyTable(type.Name)) + { + Log.Logger.Information("Init Table:{TableName}", type.Name); + Migrate(context, type); + } + continue; + } + + var tableName = context.MappingTables.FirstOrDefault(s => s.EntityName == type.Name)?.DbTableName; + if (string.IsNullOrWhiteSpace(tableName)) + { + tableName = context.EntityMaintenance.GetEntityInfo(type).DbTableName; + } + + var ver = oldVersions.GetValueOrDefault(tableName); + if (ver != null) + { + var oldVersion = new Version(ver); + if (oldVersion >= version.Version) continue; + } + + Log.Logger.Information("Modify Table:{TableName} oldVersion:{Ver} newVersion:{NewVersion}", + tableName, ver, version.Version); + Migrate(context, type); + + if (ver == null) + await context.Insertable(new TableVersion + { + TableName = tableName, + Version = version.Version.ToString() + }).ExecuteCommandAsync(); + else + await context.Updateable(new TableVersion + { + TableName = tableName, + Version = version.Version.ToString() + }).ExecuteCommandAsync(); + } + } +} \ No newline at end of file diff --git a/Blog.Core.Migrate/Core/TableVersion.cs b/Blog.Core.Migrate/Core/TableVersion.cs new file mode 100644 index 00000000..888a4595 --- /dev/null +++ b/Blog.Core.Migrate/Core/TableVersion.cs @@ -0,0 +1,18 @@ +using SqlSugar; + +namespace Blog.Core.Migrate.Core; + +/// <summary> +/// 数据表版本 +/// </summary> +public class TableVersion +{ + /// <summary> + /// 表名称 + /// </summary> + [SugarColumn(Length = 128, IsPrimaryKey = true)] + public string TableName { get; set; } + + [SugarColumn(Length = 50)] + public string Version { get; set; } +} \ No newline at end of file diff --git a/Blog.Core.Model/Base/BaseLog.cs b/Blog.Core.Model/Base/BaseLog.cs index 829ff09e..bce8bffa 100644 --- a/Blog.Core.Model/Base/BaseLog.cs +++ b/Blog.Core.Model/Base/BaseLog.cs @@ -1,7 +1,4 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Base; +namespace Blog.Core.Model.Base; public abstract class BaseLog : RootEntityTkey<long> { diff --git a/Blog.Core.Model/Models/RootTkey/BaseEntity.cs b/Blog.Core.Model/Base/RootTkey/BaseEntity.cs similarity index 93% rename from Blog.Core.Model/Models/RootTkey/BaseEntity.cs rename to Blog.Core.Model/Base/RootTkey/BaseEntity.cs index 5d5d4414..b120bcd9 100644 --- a/Blog.Core.Model/Models/RootTkey/BaseEntity.cs +++ b/Blog.Core.Model/Base/RootTkey/BaseEntity.cs @@ -1,8 +1,6 @@ -using Blog.Core.Model.Models.RootTkey.Interface; -using SqlSugar; -using System; +using Blog.Core.Model.Base.RootTkey.Interface; -namespace Blog.Core.Model.Models.RootTkey; +namespace Blog.Core.Model.Base.RootTkey; [SugarIndex("index_{table}_Enabled", nameof(Enabled), OrderByType.Asc)] [SugarIndex("index_{table}_IsDeleted", nameof(IsDeleted), OrderByType.Asc)] diff --git a/Blog.Core.Model/Models/RootTkey/DepartmentRoot.cs b/Blog.Core.Model/Base/RootTkey/DepartmentRoot.cs similarity index 80% rename from Blog.Core.Model/Models/RootTkey/DepartmentRoot.cs rename to Blog.Core.Model/Base/RootTkey/DepartmentRoot.cs index ab10c9f8..df99de59 100644 --- a/Blog.Core.Model/Models/RootTkey/DepartmentRoot.cs +++ b/Blog.Core.Model/Base/RootTkey/DepartmentRoot.cs @@ -1,8 +1,4 @@ -using SqlSugar; -using System; -using System.Collections.Generic; - -namespace Blog.Core.Model +namespace Blog.Core.Model.Base.RootTkey { /// <summary> /// 部门表 diff --git a/Blog.Core.Model/Models/RootTkey/Interface/IDeleteFilter.cs b/Blog.Core.Model/Base/RootTkey/Interface/IDeleteFilter.cs similarity index 69% rename from Blog.Core.Model/Models/RootTkey/Interface/IDeleteFilter.cs rename to Blog.Core.Model/Base/RootTkey/Interface/IDeleteFilter.cs index 57d421e9..66011658 100644 --- a/Blog.Core.Model/Models/RootTkey/Interface/IDeleteFilter.cs +++ b/Blog.Core.Model/Base/RootTkey/Interface/IDeleteFilter.cs @@ -1,4 +1,4 @@ -namespace Blog.Core.Model.Models.RootTkey.Interface; +namespace Blog.Core.Model.Base.RootTkey.Interface; /// <summary> /// 软删除 过滤器 diff --git a/Blog.Core.Model/Models/RootTkey/ModulesRoot.cs b/Blog.Core.Model/Base/RootTkey/ModulesRoot.cs similarity index 85% rename from Blog.Core.Model/Models/RootTkey/ModulesRoot.cs rename to Blog.Core.Model/Base/RootTkey/ModulesRoot.cs index 64d2eef4..8f5c1270 100644 --- a/Blog.Core.Model/Models/RootTkey/ModulesRoot.cs +++ b/Blog.Core.Model/Base/RootTkey/ModulesRoot.cs @@ -1,7 +1,4 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model +namespace Blog.Core.Model.Base.RootTkey { /// <summary> /// 接口API地址信息表 diff --git a/Blog.Core.Model/Models/RootTkey/PermissionRoot.cs b/Blog.Core.Model/Base/RootTkey/PermissionRoot.cs similarity index 84% rename from Blog.Core.Model/Models/RootTkey/PermissionRoot.cs rename to Blog.Core.Model/Base/RootTkey/PermissionRoot.cs index a001b99f..55754505 100644 --- a/Blog.Core.Model/Models/RootTkey/PermissionRoot.cs +++ b/Blog.Core.Model/Base/RootTkey/PermissionRoot.cs @@ -1,8 +1,4 @@ -using SqlSugar; -using System; -using System.Collections.Generic; - -namespace Blog.Core.Model +namespace Blog.Core.Model.Base.RootTkey { /// <summary> /// 路由菜单表 diff --git a/Blog.Core.Model/Models/RootTkey/RoleModulePermissionRoot.cs b/Blog.Core.Model/Base/RootTkey/RoleModulePermissionRoot.cs similarity index 90% rename from Blog.Core.Model/Models/RootTkey/RoleModulePermissionRoot.cs rename to Blog.Core.Model/Base/RootTkey/RoleModulePermissionRoot.cs index 72c4e3d8..024cd03f 100644 --- a/Blog.Core.Model/Models/RootTkey/RoleModulePermissionRoot.cs +++ b/Blog.Core.Model/Base/RootTkey/RoleModulePermissionRoot.cs @@ -1,7 +1,4 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model +namespace Blog.Core.Model.Base.RootTkey { /// <summary> /// 按钮跟权限关联表 diff --git a/Blog.Core.Model/Models/RootTkey/RootEntityTkey.cs b/Blog.Core.Model/Base/RootTkey/RootEntityTkey.cs similarity index 81% rename from Blog.Core.Model/Models/RootTkey/RootEntityTkey.cs rename to Blog.Core.Model/Base/RootTkey/RootEntityTkey.cs index 20bdda0d..de8f802c 100644 --- a/Blog.Core.Model/Models/RootTkey/RootEntityTkey.cs +++ b/Blog.Core.Model/Base/RootTkey/RootEntityTkey.cs @@ -1,7 +1,4 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model +namespace Blog.Core.Model.Base.RootTkey { public class RootEntityTkey<Tkey> where Tkey : IEquatable<Tkey> { diff --git a/Blog.Core.Model/Models/RootTkey/TopicDetailRoot.cs b/Blog.Core.Model/Base/RootTkey/TopicDetailRoot.cs similarity index 82% rename from Blog.Core.Model/Models/RootTkey/TopicDetailRoot.cs rename to Blog.Core.Model/Base/RootTkey/TopicDetailRoot.cs index 8ae42152..6df85d9d 100644 --- a/Blog.Core.Model/Models/RootTkey/TopicDetailRoot.cs +++ b/Blog.Core.Model/Base/RootTkey/TopicDetailRoot.cs @@ -1,6 +1,4 @@ -using System; - -namespace Blog.Core.Model +namespace Blog.Core.Model.Base.RootTkey { /// <summary> /// Tibug 博文 diff --git a/Blog.Core.Model/Models/RootTkey/UserRoleRoot.cs b/Blog.Core.Model/Base/RootTkey/UserRoleRoot.cs similarity index 90% rename from Blog.Core.Model/Models/RootTkey/UserRoleRoot.cs rename to Blog.Core.Model/Base/RootTkey/UserRoleRoot.cs index f4cd4a58..bb968c7f 100644 --- a/Blog.Core.Model/Models/RootTkey/UserRoleRoot.cs +++ b/Blog.Core.Model/Base/RootTkey/UserRoleRoot.cs @@ -1,6 +1,4 @@ -using System; - -namespace Blog.Core.Model +namespace Blog.Core.Model.Base.RootTkey { /// <summary> /// 用户跟角色关联表 diff --git a/Blog.Core.Model/Models/RootTkey/sysUserInfoRoot.cs b/Blog.Core.Model/Base/RootTkey/sysUserInfoRoot.cs similarity index 81% rename from Blog.Core.Model/Models/RootTkey/sysUserInfoRoot.cs rename to Blog.Core.Model/Base/RootTkey/sysUserInfoRoot.cs index 60531b1c..3ce4a2d9 100644 --- a/Blog.Core.Model/Models/RootTkey/sysUserInfoRoot.cs +++ b/Blog.Core.Model/Base/RootTkey/sysUserInfoRoot.cs @@ -1,8 +1,4 @@ -using SqlSugar; -using System; -using System.Collections.Generic; - -namespace Blog.Core.Model +namespace Blog.Core.Model.Base.RootTkey { /// <summary> /// 用户信息表 diff --git a/Blog.Core.Model/Tenants/ITenantEntity.cs b/Blog.Core.Model/Base/Tenants/ITenantEntity.cs similarity index 79% rename from Blog.Core.Model/Tenants/ITenantEntity.cs rename to Blog.Core.Model/Base/Tenants/ITenantEntity.cs index 2d0c5dc9..f6f05bd9 100644 --- a/Blog.Core.Model/Tenants/ITenantEntity.cs +++ b/Blog.Core.Model/Base/Tenants/ITenantEntity.cs @@ -1,6 +1,4 @@ -using SqlSugar; - -namespace Blog.Core.Model.Tenants; +namespace Blog.Core.Model.Base.Tenants; /// <summary> /// 租户模型接口 diff --git a/Blog.Core.Model/Tenants/MultiTenantAttribute.cs b/Blog.Core.Model/Base/Tenants/MultiTenantAttribute.cs similarity index 90% rename from Blog.Core.Model/Tenants/MultiTenantAttribute.cs rename to Blog.Core.Model/Base/Tenants/MultiTenantAttribute.cs index 443745bf..887a43bc 100644 --- a/Blog.Core.Model/Tenants/MultiTenantAttribute.cs +++ b/Blog.Core.Model/Base/Tenants/MultiTenantAttribute.cs @@ -1,6 +1,4 @@ -using System; - -namespace Blog.Core.Model.Tenants; +namespace Blog.Core.Model.Base.Tenants; /// <summary> /// 标识 多租户 的业务表 <br/> diff --git a/Blog.Core.Model/Tenants/TenantTypeEnum.cs b/Blog.Core.Model/Base/Tenants/TenantTypeEnum.cs similarity index 91% rename from Blog.Core.Model/Tenants/TenantTypeEnum.cs rename to Blog.Core.Model/Base/Tenants/TenantTypeEnum.cs index f4af3bda..aa30e8c2 100644 --- a/Blog.Core.Model/Tenants/TenantTypeEnum.cs +++ b/Blog.Core.Model/Base/Tenants/TenantTypeEnum.cs @@ -1,6 +1,6 @@ using System.ComponentModel; -namespace Blog.Core.Model.Tenants; +namespace Blog.Core.Model.Base.Tenants; /// <summary> /// 租户隔离方案 diff --git a/Blog.Core.Model/Blog.Core.Model.csproj b/Blog.Core.Model/Blog.Core.Model.csproj index fb04c45c..9ea45849 100644 --- a/Blog.Core.Model/Blog.Core.Model.csproj +++ b/Blog.Core.Model/Blog.Core.Model.csproj @@ -19,7 +19,7 @@ </ItemGroup> <ItemGroup> - <Folder Include="Models\RootTkey\Interface\" /> + <ProjectReference Include="..\Blog.Core.Migrate\Blog.Core.Migrate.csproj" /> </ItemGroup> </Project> diff --git a/Blog.Core.Model/CustomEnums/AuthorityScopeEnum.cs b/Blog.Core.Model/CustomEnums/AuthorityScopeEnum.cs index 422b2c56..d6632b54 100644 --- a/Blog.Core.Model/CustomEnums/AuthorityScopeEnum.cs +++ b/Blog.Core.Model/CustomEnums/AuthorityScopeEnum.cs @@ -1,4 +1,4 @@ -namespace Blog.Core.Model +namespace Blog.Core.Model.CustomEnums { public enum AuthorityScopeEnum { diff --git a/Blog.Core.Model/GlobalUsings.cs b/Blog.Core.Model/GlobalUsings.cs new file mode 100644 index 00000000..55069d54 --- /dev/null +++ b/Blog.Core.Model/GlobalUsings.cs @@ -0,0 +1,9 @@ +// global using 指令 + +global using System; +global using System.Collections.Generic; +global using System.Text; +global using Blog.Core.Migrate.Attributes; +global using Blog.Core.Model.Base; +global using Blog.Core.Model.Base.RootTkey; +global using SqlSugar; \ No newline at end of file diff --git a/Blog.Core.Model/HttpEnum.cs b/Blog.Core.Model/HttpEnum.cs index 05e25582..e5ef4b3a 100644 --- a/Blog.Core.Model/HttpEnum.cs +++ b/Blog.Core.Model/HttpEnum.cs @@ -1,6 +1,4 @@ -using System; - -namespace Blog.Core.Model +namespace Blog.Core.Model { public enum HttpEnum { diff --git a/Blog.Core.Model/IDS4DbModels/ApplicationRole.cs b/Blog.Core.Model/IDS4DbModels/ApplicationRole.cs index 8baf76ea..420f3275 100644 --- a/Blog.Core.Model/IDS4DbModels/ApplicationRole.cs +++ b/Blog.Core.Model/IDS4DbModels/ApplicationRole.cs @@ -1,7 +1,4 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.IDS4DbModels +namespace Blog.Core.Model.IDS4DbModels { /// <summary> /// 以下model 来自ids4项目,多库模式,为了调取ids4数据 diff --git a/Blog.Core.Model/IDS4DbModels/ApplicationUser.cs b/Blog.Core.Model/IDS4DbModels/ApplicationUser.cs index 50529166..d53b9078 100644 --- a/Blog.Core.Model/IDS4DbModels/ApplicationUser.cs +++ b/Blog.Core.Model/IDS4DbModels/ApplicationUser.cs @@ -1,7 +1,4 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.IDS4DbModels +namespace Blog.Core.Model.IDS4DbModels { /// <summary> /// 以下model 来自ids4项目,多库模式,为了调取ids4数据 diff --git a/Blog.Core.Model/Logs/AuditSqlLog.cs b/Blog.Core.Model/Logs/AuditSqlLog.cs index f4b28195..4e17956f 100644 --- a/Blog.Core.Model/Logs/AuditSqlLog.cs +++ b/Blog.Core.Model/Logs/AuditSqlLog.cs @@ -1,11 +1,9 @@ -using Blog.Core.Model.Base; -using SqlSugar; - -namespace Blog.Core.Model.Logs; +namespace Blog.Core.Model.Logs; [Tenant("log")] [SplitTable(SplitType.Month)] //按月分表 (自带分表支持 年、季、月、周、日) [SugarTable($@"{nameof(AuditSqlLog)}_{{year}}{{month}}{{day}}")] +[MigrateVersion("1.0.0")] public class AuditSqlLog: BaseLog { diff --git a/Blog.Core.Model/Logs/GlobalErrorLog.cs b/Blog.Core.Model/Logs/GlobalErrorLog.cs index cea55642..63efbd95 100644 --- a/Blog.Core.Model/Logs/GlobalErrorLog.cs +++ b/Blog.Core.Model/Logs/GlobalErrorLog.cs @@ -1,11 +1,9 @@ -using Blog.Core.Model.Base; -using SqlSugar; - -namespace Blog.Core.Model.Logs; +namespace Blog.Core.Model.Logs; [Tenant("log")] [SplitTable(SplitType.Month)] //按月分表 (自带分表支持 年、季、月、周、日) [SugarTable($@"{nameof(GlobalErrorLog)}_{{year}}{{month}}{{day}}")] +[MigrateVersion("1.0.0")] public class GlobalErrorLog : BaseLog { [SugarColumn(IsNullable = true, ColumnDataType = "longtext,text,clob")] diff --git a/Blog.Core.Model/Logs/GlobalInformationLog.cs b/Blog.Core.Model/Logs/GlobalInformationLog.cs index 9e627acb..147ea3ea 100644 --- a/Blog.Core.Model/Logs/GlobalInformationLog.cs +++ b/Blog.Core.Model/Logs/GlobalInformationLog.cs @@ -1,11 +1,9 @@ -using Blog.Core.Model.Base; -using SqlSugar; - -namespace Blog.Core.Model.Logs; +namespace Blog.Core.Model.Logs; [Tenant("log")] [SplitTable(SplitType.Month)] //按月分表 (自带分表支持 年、季、月、周、日) [SugarTable($@"{nameof(GlobalInformationLog)}_{{year}}{{month}}{{day}}")] +[MigrateVersion("1.0.0")] public class GlobalInformationLog : BaseLog { diff --git a/Blog.Core.Model/Logs/GlobalWarningLog.cs b/Blog.Core.Model/Logs/GlobalWarningLog.cs index 36d8545e..9403b7ce 100644 --- a/Blog.Core.Model/Logs/GlobalWarningLog.cs +++ b/Blog.Core.Model/Logs/GlobalWarningLog.cs @@ -1,11 +1,9 @@ -using Blog.Core.Model.Base; -using SqlSugar; - -namespace Blog.Core.Model.Logs; +namespace Blog.Core.Model.Logs; [Tenant("log")] [SplitTable(SplitType.Month)] //按月分表 (自带分表支持 年、季、月、周、日) [SugarTable($@"{nameof(GlobalWarningLog)}_{{year}}{{month}}{{day}}")] +[MigrateVersion("1.0.0")] public class GlobalWarningLog: BaseLog { diff --git a/Blog.Core.Model/Models/AccessTrendLog.cs b/Blog.Core.Model/Models/AccessTrendLog.cs index bc4848cf..0a9e5446 100644 --- a/Blog.Core.Model/Models/AccessTrendLog.cs +++ b/Blog.Core.Model/Models/AccessTrendLog.cs @@ -1,11 +1,9 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 用户访问趋势日志 /// </summary> + [MigrateVersion("1.0.0")] public class AccessTrendLog : RootEntityTkey<long> { /// <summary> diff --git a/Blog.Core.Model/Models/Advertisement.cs b/Blog.Core.Model/Models/Advertisement.cs index 3b11b21f..fb6b7fe8 100644 --- a/Blog.Core.Model/Models/Advertisement.cs +++ b/Blog.Core.Model/Models/Advertisement.cs @@ -1,8 +1,6 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { + [MigrateVersion("1.0.0")] public class Advertisement : RootEntityTkey<long> { diff --git a/Blog.Core.Model/Models/BlogArticle.cs b/Blog.Core.Model/Models/BlogArticle.cs index 8b75c8df..c1d839b9 100644 --- a/Blog.Core.Model/Models/BlogArticle.cs +++ b/Blog.Core.Model/Models/BlogArticle.cs @@ -1,12 +1,9 @@ -using SqlSugar; -using System; -using System.Collections.Generic; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 博客文章 /// </summary> + [MigrateVersion("1.0.0")] public class BlogArticle { /// <summary> diff --git a/Blog.Core.Model/Models/BlogArticleComment.cs b/Blog.Core.Model/Models/BlogArticleComment.cs index 519fb003..8464d286 100644 --- a/Blog.Core.Model/Models/BlogArticleComment.cs +++ b/Blog.Core.Model/Models/BlogArticleComment.cs @@ -1,10 +1,9 @@ -using SqlSugar; - -namespace Blog.Core.Model.Models; +namespace Blog.Core.Model.Models; /// <summary> /// 博客文章 评论 /// </summary> +[MigrateVersion("1.0.0")] public class BlogArticleComment : RootEntityTkey<long> { public long bID { get; set; } diff --git a/Blog.Core.Model/Models/Department.cs b/Blog.Core.Model/Models/Department.cs index 424bcf44..d91e9ae6 100644 --- a/Blog.Core.Model/Models/Department.cs +++ b/Blog.Core.Model/Models/Department.cs @@ -1,12 +1,9 @@ -using SqlSugar; -using System; - - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { ///<summary> /// 部门表 ///</summary> + [MigrateVersion("1.0.0")] public class Department : DepartmentRoot<long> { /// <summary> diff --git a/Blog.Core.Model/Models/GblLogAudit.cs b/Blog.Core.Model/Models/GblLogAudit.cs index d4a85411..b203a467 100644 --- a/Blog.Core.Model/Models/GblLogAudit.cs +++ b/Blog.Core.Model/Models/GblLogAudit.cs @@ -1,12 +1,10 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 用户团队表 /// </summary> [SugarTable("GblLogAudit", TableDescription = "日志审计")] + [MigrateVersion("1.0.0")] public class GblLogAudit { ///<summary> diff --git a/Blog.Core.Model/Models/Guestbook.cs b/Blog.Core.Model/Models/Guestbook.cs index 0cd5dcef..429fc085 100644 --- a/Blog.Core.Model/Models/Guestbook.cs +++ b/Blog.Core.Model/Models/Guestbook.cs @@ -1,8 +1,6 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { + [MigrateVersion("1.0.0")] public class Guestbook : RootEntityTkey<long> { diff --git a/Blog.Core.Model/Models/Modules.cs b/Blog.Core.Model/Models/Modules.cs index 684cfcd0..a986b5d0 100644 --- a/Blog.Core.Model/Models/Modules.cs +++ b/Blog.Core.Model/Models/Modules.cs @@ -1,11 +1,9 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 接口API地址信息表 /// </summary> + [MigrateVersion("1.0.0")] public class Modules : ModulesRoot<long> { public Modules() diff --git a/Blog.Core.Model/Models/OperateLog.cs b/Blog.Core.Model/Models/OperateLog.cs index 3c2fb54c..8f509f50 100644 --- a/Blog.Core.Model/Models/OperateLog.cs +++ b/Blog.Core.Model/Models/OperateLog.cs @@ -1,11 +1,9 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 日志记录 /// </summary> + [MigrateVersion("1.0.0")] public class OperateLog : RootEntityTkey<long> { diff --git a/Blog.Core.Model/Models/PasswordLib.cs b/Blog.Core.Model/Models/PasswordLib.cs index 2037df4d..6bbdf491 100644 --- a/Blog.Core.Model/Models/PasswordLib.cs +++ b/Blog.Core.Model/Models/PasswordLib.cs @@ -1,13 +1,11 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 密码库表 /// </summary> [SugarTable("PasswordLib", "密码库表")]//('数据库表名','数据库表备注') //[TenantAttribute("WMBLOG_MYSQL_2")] //('代表是哪个数据库,名字是appsettings.json 的 ConnId') + [MigrateVersion("1.0.0")] public class PasswordLib { [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = false)] diff --git a/Blog.Core.Model/Models/Permission.cs b/Blog.Core.Model/Models/Permission.cs index 95a46b85..b41e555d 100644 --- a/Blog.Core.Model/Models/Permission.cs +++ b/Blog.Core.Model/Models/Permission.cs @@ -1,12 +1,9 @@ -using SqlSugar; -using System; -using System.Collections.Generic; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 路由菜单表 /// </summary> + [MigrateVersion("1.0.0")] public class Permission : PermissionRoot<long> { public Permission() diff --git a/Blog.Core.Model/Models/Role.cs b/Blog.Core.Model/Models/Role.cs index 0e65bcaf..993c7043 100644 --- a/Blog.Core.Model/Models/Role.cs +++ b/Blog.Core.Model/Models/Role.cs @@ -1,11 +1,9 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 角色表 /// </summary> + [MigrateVersion("1.0.0")] public class Role : RootEntityTkey<long> { public Role() diff --git a/Blog.Core.Model/Models/RoleModulePermission.cs b/Blog.Core.Model/Models/RoleModulePermission.cs index f33c1080..38c2535f 100644 --- a/Blog.Core.Model/Models/RoleModulePermission.cs +++ b/Blog.Core.Model/Models/RoleModulePermission.cs @@ -1,11 +1,9 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 按钮跟权限关联表 /// </summary> + [MigrateVersion("1.0.0")] public class RoleModulePermission : RoleModulePermissionRoot<long> { public RoleModulePermission() diff --git a/Blog.Core.Model/Models/SplitDemo.cs b/Blog.Core.Model/Models/SplitDemo.cs index 75154038..e1124957 100644 --- a/Blog.Core.Model/Models/SplitDemo.cs +++ b/Blog.Core.Model/Models/SplitDemo.cs @@ -1,9 +1,5 @@ using Newtonsoft.Json; -using SqlSugar; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; @@ -11,6 +7,7 @@ namespace Blog.Core.Model.Models { [SplitTable(SplitType.Day)]//按天分表 (自带分表支持 年、季、月、周、日) [SugarTable("SplitDemo_{year}{month}{day}")]//3个变量必须要有,这么设计为了兼容开始按年,后面改成按月、按日 + [MigrateVersion("1.0.0")] public class SplitDemo { [SugarColumn(IsPrimaryKey = true)] diff --git a/Blog.Core.Model/Models/SysTenant.cs b/Blog.Core.Model/Models/SysTenant.cs index 61d03866..7fc395b9 100644 --- a/Blog.Core.Model/Models/SysTenant.cs +++ b/Blog.Core.Model/Models/SysTenant.cs @@ -1,5 +1,4 @@ -using Blog.Core.Model.Tenants; -using SqlSugar; +using Blog.Core.Model.Base.Tenants; namespace Blog.Core.Model.Models; @@ -14,6 +13,7 @@ namespace Blog.Core.Model.Models; /// 注意:<br/> /// 使用租户Id方案,无需配置分库的连接 /// </summary> +[MigrateVersion("1.0.0")] public class SysTenant : RootEntityTkey<long> { /// <summary> diff --git a/Blog.Core.Model/Models/TasksLog.cs b/Blog.Core.Model/Models/TasksLog.cs index c79e8077..2234cf49 100644 --- a/Blog.Core.Model/Models/TasksLog.cs +++ b/Blog.Core.Model/Models/TasksLog.cs @@ -1,11 +1,9 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 任务日志表 /// </summary> + [MigrateVersion("1.0.0")] public class TasksLog : RootEntityTkey<long> { /// <summary> diff --git a/Blog.Core.Model/Models/TasksQz.cs b/Blog.Core.Model/Models/TasksQz.cs index b029a995..89283adb 100644 --- a/Blog.Core.Model/Models/TasksQz.cs +++ b/Blog.Core.Model/Models/TasksQz.cs @@ -1,13 +1,11 @@ using Blog.Core.Model.ViewModels; -using SqlSugar; -using System; -using System.Collections.Generic; namespace Blog.Core.Model.Models { /// <summary> /// 任务计划表 /// </summary> + [MigrateVersion("1.0.0")] public class TasksQz : RootEntityTkey<long> { /// <summary> diff --git a/Blog.Core.Model/Models/Tenant/BusinessTable.cs b/Blog.Core.Model/Models/Tenant/BusinessTable.cs index b3b0140a..eed33697 100644 --- a/Blog.Core.Model/Models/Tenant/BusinessTable.cs +++ b/Blog.Core.Model/Models/Tenant/BusinessTable.cs @@ -1,12 +1,12 @@ -using Blog.Core.Model.Models.RootTkey; -using Blog.Core.Model.Tenants; +using Blog.Core.Model.Base.Tenants; -namespace Blog.Core.Model.Models; +namespace Blog.Core.Model.Models.Tenant; /// <summary> /// 业务数据 <br/> /// 多租户 (Id 隔离) /// </summary> +[MigrateVersion("1.0.0")] public class BusinessTable : BaseEntity, ITenantEntity { /// <summary> diff --git a/Blog.Core.Model/Models/Tenant/MultiBusinessSubTable.cs b/Blog.Core.Model/Models/Tenant/MultiBusinessSubTable.cs index 1ada394d..707bdf20 100644 --- a/Blog.Core.Model/Models/Tenant/MultiBusinessSubTable.cs +++ b/Blog.Core.Model/Models/Tenant/MultiBusinessSubTable.cs @@ -1,12 +1,12 @@ -using Blog.Core.Model.Models.RootTkey; -using Blog.Core.Model.Tenants; +using Blog.Core.Model.Base.Tenants; -namespace Blog.Core.Model.Models; +namespace Blog.Core.Model.Models.Tenant; /// <summary> /// 多租户-多表方案 业务表 子表 <br/> /// </summary> [MultiTenant(TenantTypeEnum.Tables)] +[MigrateVersion("1.0.0")] public class MultiBusinessSubTable : BaseEntity { public long MainId { get; set; } diff --git a/Blog.Core.Model/Models/Tenant/MultiBusinessTable.cs b/Blog.Core.Model/Models/Tenant/MultiBusinessTable.cs index 619bdaaf..2709b25e 100644 --- a/Blog.Core.Model/Models/Tenant/MultiBusinessTable.cs +++ b/Blog.Core.Model/Models/Tenant/MultiBusinessTable.cs @@ -1,14 +1,12 @@ -using System.Collections.Generic; -using Blog.Core.Model.Models.RootTkey; -using Blog.Core.Model.Tenants; -using SqlSugar; +using Blog.Core.Model.Base.Tenants; -namespace Blog.Core.Model.Models; +namespace Blog.Core.Model.Models.Tenant; /// <summary> /// 多租户-多表方案 业务表 <br/> /// </summary> [MultiTenant(TenantTypeEnum.Tables)] +[MigrateVersion("1.0.1")] public class MultiBusinessTable : BaseEntity { /// <summary> @@ -21,6 +19,12 @@ public class MultiBusinessTable : BaseEntity /// </summary> public decimal Amount { get; set; } + /// <summary> + /// 备注(测试增加字段,多表迁移) + /// </summary> + [SugarColumn(IsNullable = true)] + public string Remark { get; set; } + [Navigate(NavigateType.OneToMany, nameof(MultiBusinessSubTable.MainId))] public List<MultiBusinessSubTable> Child { get; set; } } \ No newline at end of file diff --git a/Blog.Core.Model/Models/Tenant/SubLibraryBusinessTable.cs b/Blog.Core.Model/Models/Tenant/SubLibraryBusinessTable.cs index 446fb436..82700dc4 100644 --- a/Blog.Core.Model/Models/Tenant/SubLibraryBusinessTable.cs +++ b/Blog.Core.Model/Models/Tenant/SubLibraryBusinessTable.cs @@ -1,13 +1,13 @@ -using Blog.Core.Model.Models.RootTkey; -using Blog.Core.Model.Tenants; +using Blog.Core.Model.Base.Tenants; -namespace Blog.Core.Model.Models; +namespace Blog.Core.Model.Models.Tenant; /// <summary> /// 多租户-多库方案 业务表 <br/> /// 公共库无需标记[MultiTenant]特性 /// </summary> [MultiTenant] +[MigrateVersion("1.0.1")] public class SubLibraryBusinessTable : BaseEntity { /// <summary> @@ -19,4 +19,10 @@ public class SubLibraryBusinessTable : BaseEntity /// 金额 /// </summary> public decimal Amount { get; set; } + + /// <summary> + /// 备注(测试增加字段,多库迁移) + /// </summary> + [SugarColumn(IsNullable = true)] + public string Remark { get; set; } } \ No newline at end of file diff --git a/Blog.Core.Model/Models/TestModels.cs b/Blog.Core.Model/Models/TestModels.cs index 8a8d123c..ab487592 100644 --- a/Blog.Core.Model/Models/TestModels.cs +++ b/Blog.Core.Model/Models/TestModels.cs @@ -1,6 +1,6 @@ namespace Blog.Core.Model.Models { - + [MigrateVersion("1.0.0")] public class TestMuchTableResult { public string moduleName { get; set; } diff --git a/Blog.Core.Model/Models/Topic.cs b/Blog.Core.Model/Models/Topic.cs index e57bd561..7cf8b5ab 100644 --- a/Blog.Core.Model/Models/Topic.cs +++ b/Blog.Core.Model/Models/Topic.cs @@ -1,12 +1,9 @@ -using SqlSugar; -using System; -using System.Collections.Generic; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// Tibug 类别 /// </summary> + [MigrateVersion("1.0.0")] public class Topic : RootEntityTkey<long> { public Topic() diff --git a/Blog.Core.Model/Models/TopicDetail.cs b/Blog.Core.Model/Models/TopicDetail.cs index 6cb69c67..8a8aaadf 100644 --- a/Blog.Core.Model/Models/TopicDetail.cs +++ b/Blog.Core.Model/Models/TopicDetail.cs @@ -1,11 +1,9 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// Tibug 博文 /// </summary> + [MigrateVersion("1.0.0")] public class TopicDetail : TopicDetailRoot<long> { public TopicDetail() diff --git a/Blog.Core.Model/Models/UserRole.cs b/Blog.Core.Model/Models/UserRole.cs index 7ed9c6be..630ea5b5 100644 --- a/Blog.Core.Model/Models/UserRole.cs +++ b/Blog.Core.Model/Models/UserRole.cs @@ -1,11 +1,9 @@ -using SqlSugar; -using System; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 用户跟角色关联表 /// </summary> + [MigrateVersion("1.0.0")] public class UserRole : UserRoleRoot<long> { public UserRole() { } diff --git a/Blog.Core.Model/Models/WeChatCompany.cs b/Blog.Core.Model/Models/WeChatCompany.cs index d07d4208..ad2cbb14 100644 --- a/Blog.Core.Model/Models/WeChatCompany.cs +++ b/Blog.Core.Model/Models/WeChatCompany.cs @@ -1,7 +1,4 @@ -using System; -using System.Linq; -using System.Text; -using SqlSugar; +using System.Linq; namespace Blog.Core.Model.Models { @@ -9,6 +6,7 @@ namespace Blog.Core.Model.Models /// ///</summary> [SugarTable("WeChatCompany")] + [MigrateVersion("1.0.0")] public partial class WeChatCompany { diff --git a/Blog.Core.Model/Models/WeChatConfig.cs b/Blog.Core.Model/Models/WeChatConfig.cs index 16910487..fd57335e 100644 --- a/Blog.Core.Model/Models/WeChatConfig.cs +++ b/Blog.Core.Model/Models/WeChatConfig.cs @@ -1,7 +1,4 @@ -using System; -using System.Linq; -using System.Text; -using SqlSugar; +using System.Linq; namespace Blog.Core.Model.Models { @@ -9,6 +6,7 @@ namespace Blog.Core.Model.Models /// ///</summary> [SugarTable("WeChatConfig")] + [MigrateVersion("1.0.0")] public class WeChatConfig { diff --git a/Blog.Core.Model/Models/WeChatPushLog.cs b/Blog.Core.Model/Models/WeChatPushLog.cs index 5368c806..d47298d3 100644 --- a/Blog.Core.Model/Models/WeChatPushLog.cs +++ b/Blog.Core.Model/Models/WeChatPushLog.cs @@ -1,7 +1,4 @@ -using System; -using System.Linq; -using System.Text; -using SqlSugar; +using System.Linq; namespace Blog.Core.Model.Models { @@ -9,6 +6,7 @@ namespace Blog.Core.Model.Models /// ///</summary> [SugarTable("WeChatPushLog")] + [MigrateVersion("1.0.0")] public partial class WeChatPushLog { diff --git a/Blog.Core.Model/Models/WeChatQR.cs b/Blog.Core.Model/Models/WeChatQR.cs index 06ea8684..8a1f73fe 100644 --- a/Blog.Core.Model/Models/WeChatQR.cs +++ b/Blog.Core.Model/Models/WeChatQR.cs @@ -1,7 +1,4 @@ -using System; -using System.Linq; -using System.Text; -using SqlSugar; +using System.Linq; namespace Blog.Core.Model.Models { @@ -9,6 +6,7 @@ namespace Blog.Core.Model.Models /// ///</summary> [SugarTable("WeChatQR")] + [MigrateVersion("1.0.0")] public partial class WeChatQR { diff --git a/Blog.Core.Model/Models/WeChatSub.cs b/Blog.Core.Model/Models/WeChatSub.cs index 48787a5f..da9652e5 100644 --- a/Blog.Core.Model/Models/WeChatSub.cs +++ b/Blog.Core.Model/Models/WeChatSub.cs @@ -1,7 +1,4 @@ -using System; -using System.Linq; -using System.Text; -using SqlSugar; +using System.Linq; namespace Blog.Core.Model.Models { @@ -9,6 +6,7 @@ namespace Blog.Core.Model.Models /// ///</summary> [SugarTable("WeChatSub")] + [MigrateVersion("1.0.0")] public partial class WeChatSub { [SugarColumn(IsNullable = false,IsPrimaryKey = true)] diff --git a/Blog.Core.Model/Models/WeChatUploadFile.cs b/Blog.Core.Model/Models/WeChatUploadFile.cs index f7b979de..8ebe1a7a 100644 --- a/Blog.Core.Model/Models/WeChatUploadFile.cs +++ b/Blog.Core.Model/Models/WeChatUploadFile.cs @@ -1,7 +1,4 @@ -using System; -using System.Linq; -using System.Text; -using SqlSugar; +using System.Linq; namespace Blog.Core.Model.Models { @@ -9,6 +6,7 @@ namespace Blog.Core.Model.Models /// ///</summary> [SugarTable("WeChatUploadFile")] + [MigrateVersion("1.0.0")] public partial class WeChatUploadFile { diff --git a/Blog.Core.Model/Models/sysUserInfo.cs b/Blog.Core.Model/Models/sysUserInfo.cs index 1137d91c..2f54ecea 100644 --- a/Blog.Core.Model/Models/sysUserInfo.cs +++ b/Blog.Core.Model/Models/sysUserInfo.cs @@ -1,14 +1,11 @@ -using SqlSugar; -using System; -using System.Collections.Generic; - -namespace Blog.Core.Model.Models +namespace Blog.Core.Model.Models { /// <summary> /// 用户信息表 /// </summary> //[SugarTable("SysUserInfo")] [SugarTable("SysUserInfo", "用户表")] //('数据库表名','数据库表备注') + [MigrateVersion("1.0.0")] public class SysUserInfo : SysUserInfoRoot<long> { public SysUserInfo() diff --git a/Blog.Core.Model/PageModel.cs b/Blog.Core.Model/PageModel.cs index f6872b66..589912b8 100644 --- a/Blog.Core.Model/PageModel.cs +++ b/Blog.Core.Model/PageModel.cs @@ -1,6 +1,4 @@ using AutoMapper; -using System; -using System.Collections.Generic; namespace Blog.Core.Model { diff --git a/Blog.Core.Model/Systems/DataBase/DatabaseOutput.cs b/Blog.Core.Model/Systems/DataBase/DatabaseOutput.cs index 8cefaeb6..7befc353 100644 --- a/Blog.Core.Model/Systems/DataBase/DatabaseOutput.cs +++ b/Blog.Core.Model/Systems/DataBase/DatabaseOutput.cs @@ -1,6 +1,4 @@ -using SqlSugar; - -namespace Blog.Core.Model.Systems.DataBase; +namespace Blog.Core.Model.Systems.DataBase; public class DatabaseOutput { diff --git a/Blog.Core.Model/TableModel.cs b/Blog.Core.Model/TableModel.cs index 289e9c8c..296f26e4 100644 --- a/Blog.Core.Model/TableModel.cs +++ b/Blog.Core.Model/TableModel.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; - -namespace Blog.Core.Model +namespace Blog.Core.Model { /// <summary> /// 表格数据,支持分页 diff --git a/Blog.Core.Model/ViewModels/AdvertisementViewModels.cs b/Blog.Core.Model/ViewModels/AdvertisementViewModels.cs index 81a1974a..1e6958dc 100644 --- a/Blog.Core.Model/ViewModels/AdvertisementViewModels.cs +++ b/Blog.Core.Model/ViewModels/AdvertisementViewModels.cs @@ -1,6 +1,4 @@ -using System; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 广告类 diff --git a/Blog.Core.Model/ViewModels/BlogViewModels.cs b/Blog.Core.Model/ViewModels/BlogViewModels.cs index 86c16618..5cce99da 100644 --- a/Blog.Core.Model/ViewModels/BlogViewModels.cs +++ b/Blog.Core.Model/ViewModels/BlogViewModels.cs @@ -1,6 +1,4 @@ -using System; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 博客信息展示类 diff --git a/Blog.Core.Model/ViewModels/EnumDemoDto.cs b/Blog.Core.Model/ViewModels/EnumDemoDto.cs index ae6ffbdd..c2a11c7d 100644 --- a/Blog.Core.Model/ViewModels/EnumDemoDto.cs +++ b/Blog.Core.Model/ViewModels/EnumDemoDto.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Linq; using System.Threading.Tasks; namespace Blog.Core.Model.ViewModels diff --git a/Blog.Core.Model/ViewModels/GuestbookViewModels.cs b/Blog.Core.Model/ViewModels/GuestbookViewModels.cs index 1729bdb4..0a03d5b7 100644 --- a/Blog.Core.Model/ViewModels/GuestbookViewModels.cs +++ b/Blog.Core.Model/ViewModels/GuestbookViewModels.cs @@ -1,5 +1,4 @@ -using System; -using Blog.Core.Model.Models; +using Blog.Core.Model.Models; namespace Blog.Core.Model.ViewModels { diff --git a/Blog.Core.Model/ViewModels/PayReturnResultModel.cs b/Blog.Core.Model/ViewModels/PayReturnResultModel.cs index 4cb8b624..db8c58b7 100644 --- a/Blog.Core.Model/ViewModels/PayReturnResultModel.cs +++ b/Blog.Core.Model/ViewModels/PayReturnResultModel.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Linq; using System.Threading.Tasks; namespace Blog.Core.Model.ViewModels diff --git a/Blog.Core.Model/ViewModels/RootTKey/SysUserInfoDtoRoot.cs b/Blog.Core.Model/ViewModels/RootTKey/SysUserInfoDtoRoot.cs index bcccb8e7..260f5d9a 100644 --- a/Blog.Core.Model/ViewModels/RootTKey/SysUserInfoDtoRoot.cs +++ b/Blog.Core.Model/ViewModels/RootTKey/SysUserInfoDtoRoot.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels.RootTKey { public class SysUserInfoDtoRoot<Tkey> where Tkey : IEquatable<Tkey> { diff --git a/Blog.Core.Model/ViewModels/SidebarMenuViewModel.cs b/Blog.Core.Model/ViewModels/SidebarMenuViewModel.cs index d098f397..6c8ef6cd 100644 --- a/Blog.Core.Model/ViewModels/SidebarMenuViewModel.cs +++ b/Blog.Core.Model/ViewModels/SidebarMenuViewModel.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 菜单展示model diff --git a/Blog.Core.Model/ViewModels/SysUserInfoDto.cs b/Blog.Core.Model/ViewModels/SysUserInfoDto.cs index 3b5451f0..28cdf030 100644 --- a/Blog.Core.Model/ViewModels/SysUserInfoDto.cs +++ b/Blog.Core.Model/ViewModels/SysUserInfoDto.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using Blog.Core.Model.ViewModels.RootTKey; namespace Blog.Core.Model.ViewModels { diff --git a/Blog.Core.Model/ViewModels/TaskInfoDto.cs b/Blog.Core.Model/ViewModels/TaskInfoDto.cs index 49b02085..164180f2 100644 --- a/Blog.Core.Model/ViewModels/TaskInfoDto.cs +++ b/Blog.Core.Model/ViewModels/TaskInfoDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 调度任务触发器信息实体 diff --git a/Blog.Core.Model/ViewModels/WeChatApiDto.cs b/Blog.Core.Model/ViewModels/WeChatApiDto.cs index e02a55b1..846ff4a3 100644 --- a/Blog.Core.Model/ViewModels/WeChatApiDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatApiDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信接口消息DTO diff --git a/Blog.Core.Model/ViewModels/WeChatCardMsgDataDto.cs b/Blog.Core.Model/ViewModels/WeChatCardMsgDataDto.cs index 2448bdd4..d1c6c0df 100644 --- a/Blog.Core.Model/ViewModels/WeChatCardMsgDataDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatCardMsgDataDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信推送消息Dto diff --git a/Blog.Core.Model/ViewModels/WeChatCardMsgDataOpenIDDto.cs b/Blog.Core.Model/ViewModels/WeChatCardMsgDataOpenIDDto.cs index e90e5f47..62eb5ca9 100644 --- a/Blog.Core.Model/ViewModels/WeChatCardMsgDataOpenIDDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatCardMsgDataOpenIDDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信推送消息Dto diff --git a/Blog.Core.Model/ViewModels/WeChatCardMsgDetailDto.cs b/Blog.Core.Model/ViewModels/WeChatCardMsgDetailDto.cs index 17db8c91..a85b3739 100644 --- a/Blog.Core.Model/ViewModels/WeChatCardMsgDetailDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatCardMsgDetailDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 消息模板dto(如何填写数据,请参考微信模板即可) diff --git a/Blog.Core.Model/ViewModels/WeChatMenuButtonDto.cs b/Blog.Core.Model/ViewModels/WeChatMenuButtonDto.cs index df8952cd..2ade9d26 100644 --- a/Blog.Core.Model/ViewModels/WeChatMenuButtonDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatMenuButtonDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 获取微信菜单DTO,用于存放具体菜单内容 diff --git a/Blog.Core.Model/ViewModels/WeChatMenuDto.cs b/Blog.Core.Model/ViewModels/WeChatMenuDto.cs index 3015a2a7..462c0485 100644 --- a/Blog.Core.Model/ViewModels/WeChatMenuDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatMenuDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 获取微信菜单DTO diff --git a/Blog.Core.Model/ViewModels/WeChatOpenIDsDto.cs b/Blog.Core.Model/ViewModels/WeChatOpenIDsDto.cs index 93c13490..affe5d44 100644 --- a/Blog.Core.Model/ViewModels/WeChatOpenIDsDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatOpenIDsDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信OpenID列表Dto diff --git a/Blog.Core.Model/ViewModels/WeChatPushCardMsgDetailDto.cs b/Blog.Core.Model/ViewModels/WeChatPushCardMsgDetailDto.cs index b203dacb..aaeaa7b1 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushCardMsgDetailDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushCardMsgDetailDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 推送详细数据 diff --git a/Blog.Core.Model/ViewModels/WeChatPushCardMsgDto.cs b/Blog.Core.Model/ViewModels/WeChatPushCardMsgDto.cs index 588ee09c..68ccd018 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushCardMsgDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushCardMsgDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 推送给微信所需Dto diff --git a/Blog.Core.Model/ViewModels/WeChatPushCardMsgValueColorDto.cs b/Blog.Core.Model/ViewModels/WeChatPushCardMsgValueColorDto.cs index e9548fd8..97cfe516 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushCardMsgValueColorDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushCardMsgValueColorDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信keyword所需Dto diff --git a/Blog.Core.Model/ViewModels/WeChatPushLinkMsgContentDto.cs b/Blog.Core.Model/ViewModels/WeChatPushLinkMsgContentDto.cs index 064eaab4..40192895 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushLinkMsgContentDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushLinkMsgContentDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { public class WeChatPushLinkMsgContentDto { diff --git a/Blog.Core.Model/ViewModels/WeChatPushPictureContentDto.cs b/Blog.Core.Model/ViewModels/WeChatPushPictureContentDto.cs index 3b29681a..f0d8b780 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushPictureContentDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushPictureContentDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { public class WeChatPushPictureContentDto { diff --git a/Blog.Core.Model/ViewModels/WeChatPushTestDto.cs b/Blog.Core.Model/ViewModels/WeChatPushTestDto.cs index a906fb80..f18d5cab 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushTestDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushTestDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 推送模拟消息Dto diff --git a/Blog.Core.Model/ViewModels/WeChatPushTextContentDto.cs b/Blog.Core.Model/ViewModels/WeChatPushTextContentDto.cs index 55d6cc50..bc284cd4 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushTextContentDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushTextContentDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { public class WeChatPushTextContentDto { diff --git a/Blog.Core.Model/ViewModels/WeChatPushVideoContentDto.cs b/Blog.Core.Model/ViewModels/WeChatPushVideoContentDto.cs index a00ad6c1..02cd17e2 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushVideoContentDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushVideoContentDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { public class WeChatPushVideoContentDto { diff --git a/Blog.Core.Model/ViewModels/WeChatPushVoiceContentDto.cs b/Blog.Core.Model/ViewModels/WeChatPushVoiceContentDto.cs index 1a9da49f..6ad88549 100644 --- a/Blog.Core.Model/ViewModels/WeChatPushVoiceContentDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatPushVoiceContentDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { public class WeChatPushVoiceContentDto { diff --git a/Blog.Core.Model/ViewModels/WeChatQRActionDto.cs b/Blog.Core.Model/ViewModels/WeChatQRActionDto.cs index 13001b6a..7d542d0a 100644 --- a/Blog.Core.Model/ViewModels/WeChatQRActionDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatQRActionDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信二维码预装发送信息dto diff --git a/Blog.Core.Model/ViewModels/WeChatQRActionInfoDto.cs b/Blog.Core.Model/ViewModels/WeChatQRActionInfoDto.cs index ba38072a..f61f8e33 100644 --- a/Blog.Core.Model/ViewModels/WeChatQRActionInfoDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatQRActionInfoDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信二维码预装具体消息 diff --git a/Blog.Core.Model/ViewModels/WeChatQRDto.cs b/Blog.Core.Model/ViewModels/WeChatQRDto.cs index eca876f3..b76c7325 100644 --- a/Blog.Core.Model/ViewModels/WeChatQRDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatQRDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信二维码预装信息DTO diff --git a/Blog.Core.Model/ViewModels/WeChatResponseUserInfo.cs b/Blog.Core.Model/ViewModels/WeChatResponseUserInfo.cs index 9d28fe51..ec1fd1e9 100644 --- a/Blog.Core.Model/ViewModels/WeChatResponseUserInfo.cs +++ b/Blog.Core.Model/ViewModels/WeChatResponseUserInfo.cs @@ -1,9 +1,4 @@ - -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 返回给调用者的Dto diff --git a/Blog.Core.Model/ViewModels/WeChatUserInfo.cs b/Blog.Core.Model/ViewModels/WeChatUserInfo.cs index faf65b1d..3546e77a 100644 --- a/Blog.Core.Model/ViewModels/WeChatUserInfo.cs +++ b/Blog.Core.Model/ViewModels/WeChatUserInfo.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信推送所需信息(公司版本) diff --git a/Blog.Core.Model/ViewModels/WeChatUserInfoOpenID.cs b/Blog.Core.Model/ViewModels/WeChatUserInfoOpenID.cs index ef01aad2..aad252f0 100644 --- a/Blog.Core.Model/ViewModels/WeChatUserInfoOpenID.cs +++ b/Blog.Core.Model/ViewModels/WeChatUserInfoOpenID.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Blog.Core.Model.ViewModels +namespace Blog.Core.Model.ViewModels { /// <summary> /// 微信推送所需信息(OpenID版本) diff --git a/Blog.Core.Model/ViewModels/WeChatValidDto.cs b/Blog.Core.Model/ViewModels/WeChatValidDto.cs index c0d038df..b61dd47b 100644 --- a/Blog.Core.Model/ViewModels/WeChatValidDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatValidDto.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Xml.Serialization; +using System.Xml.Serialization; namespace Blog.Core.Model.ViewModels { diff --git a/Blog.Core.Model/ViewModels/WeChatXMLDto.cs b/Blog.Core.Model/ViewModels/WeChatXMLDto.cs index e293849d..b5370470 100644 --- a/Blog.Core.Model/ViewModels/WeChatXMLDto.cs +++ b/Blog.Core.Model/ViewModels/WeChatXMLDto.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Xml; +using System.Xml; using System.Xml.Serialization; namespace Blog.Core.Model.ViewModels diff --git a/Blog.Core.Repository/BASE/BaseRepository.cs b/Blog.Core.Repository/BASE/BaseRepository.cs index 3a1c1ee8..3aa47fa4 100644 --- a/Blog.Core.Repository/BASE/BaseRepository.cs +++ b/Blog.Core.Repository/BASE/BaseRepository.cs @@ -3,7 +3,6 @@ using Blog.Core.IRepository.Base; using Blog.Core.Model; using Blog.Core.Model.Models; -using Blog.Core.Model.Tenants; using Blog.Core.Repository.UnitOfWorks; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using SqlSugar; @@ -13,6 +12,7 @@ using System.Linq.Expressions; using System.Reflection; using System.Threading.Tasks; +using Blog.Core.Model.Base.Tenants; namespace Blog.Core.Repository.Base { diff --git a/Blog.Core.Services/PayServices.cs b/Blog.Core.Services/PayServices.cs index b257d088..3c1450fd 100644 --- a/Blog.Core.Services/PayServices.cs +++ b/Blog.Core.Services/PayServices.cs @@ -15,6 +15,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; +using Blog.Core.Model.Base.RootTkey; namespace Blog.Core.Services { diff --git a/Blog.Core.sln b/Blog.Core.sln index 8814184f..1ec192f7 100644 --- a/Blog.Core.sln +++ b/Blog.Core.sln @@ -60,6 +60,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ocelot.Provider.Nacos", "Oc EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blog.Core.Serilog", "Blog.Core.Serilog\Blog.Core.Serilog.csproj", "{7F9057F0-ED8D-4694-B590-7D75C012DF00}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blog.Core.Migrate", "Blog.Core.Migrate\Blog.Core.Migrate.csproj", "{33CA9C84-5B1E-4783-9BA5-DE342575014C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -126,6 +128,10 @@ Global {7F9057F0-ED8D-4694-B590-7D75C012DF00}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F9057F0-ED8D-4694-B590-7D75C012DF00}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F9057F0-ED8D-4694-B590-7D75C012DF00}.Release|Any CPU.Build.0 = Release|Any CPU + {33CA9C84-5B1E-4783-9BA5-DE342575014C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {33CA9C84-5B1E-4783-9BA5-DE342575014C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33CA9C84-5B1E-4783-9BA5-DE342575014C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {33CA9C84-5B1E-4783-9BA5-DE342575014C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Directory.Build.props b/Directory.Build.props index 2934ef7e..c3a65cdf 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -2,5 +2,6 @@ <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> + <LangVersion>default</LangVersion> </PropertyGroup> </Project> \ No newline at end of file From bdb7ca1ee3d38f82251a3603f6f9e1646e238659 Mon Sep 17 00:00:00 2001 From: LemonNoCry <ningmengbuku@outlook.com> Date: Tue, 31 Dec 2024 15:10:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=8E=A8=E4=BC=98=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Blog.Core.Api/Blog.Core.Model.xml | 1702 ++++++++++++++--------------- Blog.Core.Api/Blog.Core.xml | 6 +- Blog.Core.Common/Seed/DBSeed.cs | 2 +- 3 files changed, 855 insertions(+), 855 deletions(-) diff --git a/Blog.Core.Api/Blog.Core.Model.xml b/Blog.Core.Api/Blog.Core.Model.xml index 1b1451c9..f286e4d8 100644 --- a/Blog.Core.Api/Blog.Core.Model.xml +++ b/Blog.Core.Api/Blog.Core.Model.xml @@ -4,1937 +4,1937 @@ <name>Blog.Core.Model</name> </assembly> <members> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.Enabled"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.Enabled"> <summary> 状态 <br/> 中立字段,某些表可使用某些表不使用 </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.IsDeleted"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.IsDeleted"> <summary> 中立字段,某些表可使用某些表不使用 <br/> 逻辑上的删除,非物理删除 <br/> 例如:单据删除并非直接删除 </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.IsInternal"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.IsInternal"> <summary> 中立字段 <br/> 是否内置数据 </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateId"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.CreateId"> <summary> 创建ID </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateBy"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.CreateBy"> <summary> 创建者 </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.CreateTime"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.CreateTime"> <summary> 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyId"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.ModifyId"> <summary> 修改ID </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyBy"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.ModifyBy"> <summary> 更新者 </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.ModifyTime"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.ModifyTime"> <summary> 修改日期 </summary> </member> - <member name="P:Blog.Core.Model.Models.RootTkey.BaseEntity.Version"> + <member name="P:Blog.Core.Model.Base.RootTkey.BaseEntity.Version"> <summary> 数据版本 </summary> </member> - <member name="T:Blog.Core.Model.Models.RootTkey.Interface.IDeleteFilter"> + <member name="T:Blog.Core.Model.Base.RootTkey.DepartmentRoot`1"> <summary> - 软删除 过滤器 + 部门表 </summary> </member> - <member name="T:Blog.Core.Model.Models.AccessTrendLog"> + <member name="P:Blog.Core.Model.Base.RootTkey.DepartmentRoot`1.Pid"> <summary> - 用户访问趋势日志 + 上一级(0表示无上一级) </summary> </member> - <member name="P:Blog.Core.Model.Models.AccessTrendLog.UserInfo"> + <member name="T:Blog.Core.Model.Base.RootTkey.Interface.IDeleteFilter"> <summary> - 用户 + 软删除 过滤器 </summary> </member> - <member name="P:Blog.Core.Model.Models.AccessTrendLog.Count"> + <member name="T:Blog.Core.Model.Base.RootTkey.ModulesRoot`1"> <summary> - 次数 + 接口API地址信息表 + 父类 </summary> </member> - <member name="P:Blog.Core.Model.Models.AccessTrendLog.UpdateTime"> + <member name="P:Blog.Core.Model.Base.RootTkey.ModulesRoot`1.ParentId"> <summary> - 更新时间 + 父ID </summary> </member> - <member name="P:Blog.Core.Model.Models.Advertisement.ImgUrl"> + <member name="T:Blog.Core.Model.Base.RootTkey.PermissionRoot`1"> <summary> - 广告图片 + 路由菜单表 </summary> </member> - <member name="P:Blog.Core.Model.Models.Advertisement.Title"> + <member name="P:Blog.Core.Model.Base.RootTkey.PermissionRoot`1.Pid"> <summary> - 广告标题 + 上一级菜单(0表示上一级无菜单) </summary> </member> - <member name="P:Blog.Core.Model.Models.Advertisement.Url"> + <member name="P:Blog.Core.Model.Base.RootTkey.PermissionRoot`1.Mid"> <summary> - 广告链接 + 接口api </summary> </member> - <member name="P:Blog.Core.Model.Models.Advertisement.Remark"> + <member name="T:Blog.Core.Model.Base.RootTkey.RoleModulePermissionRoot`1"> <summary> - 备注 + 按钮跟权限关联表 + 父类 </summary> </member> - <member name="P:Blog.Core.Model.Models.Advertisement.Createdate"> + <member name="P:Blog.Core.Model.Base.RootTkey.RoleModulePermissionRoot`1.RoleId"> <summary> - 创建时间 + 角色ID </summary> </member> - <member name="T:Blog.Core.Model.Models.BlogArticle"> + <member name="P:Blog.Core.Model.Base.RootTkey.RoleModulePermissionRoot`1.ModuleId"> <summary> - 博客文章 + 菜单ID </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.bID"> + <member name="P:Blog.Core.Model.Base.RootTkey.RoleModulePermissionRoot`1.PermissionId"> <summary> - 主键 + api ID </summary> - 这里之所以没用RootEntity,是想保持和之前的数据库一致,主键是bID,不是Id </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.bsubmitter"> + <member name="P:Blog.Core.Model.Base.RootTkey.RootEntityTkey`1.Id"> <summary> - 创建人 + ID + 泛型主键Tkey </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.btitle"> + <member name="T:Blog.Core.Model.Base.RootTkey.SysUserInfoRoot`1"> <summary> - 标题blog + 用户信息表 </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.bcategory"> + <member name="P:Blog.Core.Model.Base.RootTkey.SysUserInfoRoot`1.Id"> <summary> - 类别 + Id + 泛型主键Tkey </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.bcontent"> + <member name="T:Blog.Core.Model.Base.RootTkey.TopicDetailRoot`1"> <summary> - 内容 + Tibug 博文 </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.btraffic"> + <member name="T:Blog.Core.Model.Base.RootTkey.UserRoleRoot`1"> <summary> - 访问量 + 用户跟角色关联表 + 父类 </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.bcommentNum"> + <member name="P:Blog.Core.Model.Base.RootTkey.UserRoleRoot`1.UserId"> <summary> - 评论数量 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.bUpdateTime"> - <summary> - 修改时间 + 用户ID </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.bCreateTime"> + <member name="P:Blog.Core.Model.Base.RootTkey.UserRoleRoot`1.RoleId"> <summary> - 创建时间 + 角色ID </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.bRemark"> + <member name="T:Blog.Core.Model.Base.Tenants.ITenantEntity"> <summary> - 备注 + 租户模型接口 </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.IsDeleted"> + <member name="P:Blog.Core.Model.Base.Tenants.ITenantEntity.TenantId"> <summary> - 逻辑删除 + 租户Id </summary> </member> - <member name="P:Blog.Core.Model.Models.BlogArticle.Comments"> + <member name="T:Blog.Core.Model.Base.Tenants.MultiTenantAttribute"> <summary> - 评论 + 标识 多租户 的业务表 <br/> + 默认设置是多库 <br/> + 公共表无需区分 直接使用主库 各自业务在各自库中 <br/> </summary> </member> - <member name="T:Blog.Core.Model.Models.BlogArticleComment"> + <member name="T:Blog.Core.Model.Base.Tenants.TenantTypeEnum"> <summary> - 博客文章 评论 + 租户隔离方案 </summary> </member> - <member name="T:Blog.Core.Model.Models.Department"> + <member name="F:Blog.Core.Model.Base.Tenants.TenantTypeEnum.Id"> <summary> - 部门表 + Id隔离 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.CodeRelationship"> + <member name="F:Blog.Core.Model.Base.Tenants.TenantTypeEnum.Db"> <summary> - Desc:部门关系编码 - Default: - Nullable:True + 库隔离 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.Name"> + <member name="F:Blog.Core.Model.Base.Tenants.TenantTypeEnum.Tables"> <summary> - Desc:部门名称 - Default: - Nullable:True + 表隔离 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.Leader"> + <member name="F:Blog.Core.Model.CustomEnums.AuthorityScopeEnum.NONE"> <summary> - Desc:负责人 - Default: - Nullable:True + 无任何权限 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.OrderSort"> + <member name="F:Blog.Core.Model.CustomEnums.AuthorityScopeEnum.Custom"> <summary> - Desc:排序 - Default: - Nullable:True + 自定义权限 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.Status"> + <member name="F:Blog.Core.Model.CustomEnums.AuthorityScopeEnum.MyDepart"> <summary> - Desc:部门状态(0正常 1停用) - Default:0 - Nullable:True + 本部门 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.IsDeleted"> + <member name="F:Blog.Core.Model.CustomEnums.AuthorityScopeEnum.MyDepartAndDown"> <summary> - Desc:删除标志(0代表存在 2代表删除) - Default:0 - Nullable:True + 本部门及以下 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.CreateBy"> + <member name="F:Blog.Core.Model.CustomEnums.AuthorityScopeEnum.OnlySelf"> <summary> - Desc:创建者 - Default: - Nullable:True + 仅自己 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.CreateTime"> + <member name="F:Blog.Core.Model.CustomEnums.AuthorityScopeEnum.ALL"> <summary> - Desc:创建时间 - Default: - Nullable:True + 所有 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.ModifyBy"> + <member name="T:Blog.Core.Model.IDS4DbModels.ApplicationRole"> <summary> - Desc:更新者 - Default: - Nullable:True + 以下model 来自ids4项目,多库模式,为了调取ids4数据 + 角色表 </summary> </member> - <member name="P:Blog.Core.Model.Models.Department.ModifyTime"> - <summary> - Desc:更新时间 - Default: - Nullable:True - </summary> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.OrderSort"> + <summary> + 排序 + </summary> </member> - <member name="T:Blog.Core.Model.Models.GblLogAudit"> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.Enabled"> <summary> - 用户团队表 + 是否激活 </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.Id"> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateId"> <summary> - ID + 创建ID </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.TraceId"> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateBy"> <summary> - HttpContext.TraceIdentifier 事件链路ID(获取或设置一个唯一标识符,用于在跟踪日志中表示此请求。) + 创建者 </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.Date"> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateTime"> <summary> - 时间 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.Thread"> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyId"> <summary> - 线程 + 修改ID </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.Level"> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyBy"> <summary> - 等级 + 修改者 </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.Logger"> + <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyTime"> <summary> - 记录器 + 修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.LogType"> + <member name="T:Blog.Core.Model.IDS4DbModels.ApplicationUser"> <summary> - 日志类型 + 以下model 来自ids4项目,多库模式,为了调取ids4数据 + 用户表 </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.DataType"> + <member name="T:Blog.Core.Model.Love"> <summary> - 数据类型 + 这是爱 </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.Message"> + <member name="P:Blog.Core.Model.Love.Id"> <summary> - 错误信息 + id </summary> </member> - <member name="P:Blog.Core.Model.Models.GblLogAudit.Exception"> + <member name="P:Blog.Core.Model.Love.Name"> <summary> - 异常 + 姓名 </summary> </member> - <member name="P:Blog.Core.Model.Models.Guestbook.blogId"> - <summary>博客ID - + <member name="P:Blog.Core.Model.Love.Age"> + <summary> + 年龄 </summary> </member> - <member name="P:Blog.Core.Model.Models.Guestbook.createdate"> - <summary>创建时间 - + <member name="T:Blog.Core.Model.MessageModel`1"> + <summary> + 通用返回信息类 </summary> </member> - <member name="P:Blog.Core.Model.Models.Guestbook.phone"> - <summary>手机 - + <member name="P:Blog.Core.Model.MessageModel`1.status"> + <summary> + 状态码 </summary> </member> - <member name="P:Blog.Core.Model.Models.Guestbook.QQ"> - <summary>qq - + <member name="P:Blog.Core.Model.MessageModel`1.success"> + <summary> + 操作是否成功 </summary> </member> - <member name="P:Blog.Core.Model.Models.Guestbook.body"> - <summary>留言内容 - + <member name="P:Blog.Core.Model.MessageModel`1.msg"> + <summary> + 返回信息 </summary> </member> - <member name="P:Blog.Core.Model.Models.Guestbook.ip"> - <summary>ip地址 - + <member name="P:Blog.Core.Model.MessageModel`1.msgDev"> + <summary> + 开发者信息 </summary> </member> - <member name="P:Blog.Core.Model.Models.Guestbook.isshow"> - <summary>是否显示在前台,0否1是 - + <member name="P:Blog.Core.Model.MessageModel`1.response"> + <summary> + 返回数据集合 </summary> </member> - <member name="T:Blog.Core.Model.Models.Modules"> + <member name="M:Blog.Core.Model.MessageModel`1.Success(System.String)"> <summary> - 接口API地址信息表 + 返回成功 </summary> + <param name="msg">消息</param> + <returns></returns> </member> - <member name="P:Blog.Core.Model.Models.Modules.IsDeleted"> - <summary> - 获取或设置是否禁用,逻辑上的删除,非物理删除 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.Modules.Name"> + <member name="M:Blog.Core.Model.MessageModel`1.Success(System.String,`0)"> <summary> - 名称 + 返回成功 </summary> + <param name="msg">消息</param> + <param name="response">数据</param> + <returns></returns> </member> - <member name="P:Blog.Core.Model.Models.Modules.LinkUrl"> + <member name="M:Blog.Core.Model.MessageModel`1.Fail(System.String)"> <summary> - 菜单链接地址 + 返回失败 </summary> + <param name="msg">消息</param> + <returns></returns> </member> - <member name="P:Blog.Core.Model.Models.Modules.Area"> + <member name="M:Blog.Core.Model.MessageModel`1.Fail(System.String,`0)"> <summary> - 区域名称 + 返回失败 </summary> + <param name="msg">消息</param> + <param name="response">数据</param> + <returns></returns> </member> - <member name="P:Blog.Core.Model.Models.Modules.Controller"> + <member name="M:Blog.Core.Model.MessageModel`1.Message(System.Boolean,System.String,`0)"> <summary> - 控制器名称 + 返回消息 </summary> + <param name="success">失败/成功</param> + <param name="msg">消息</param> + <param name="response">数据</param> + <returns></returns> </member> - <member name="P:Blog.Core.Model.Models.Modules.Action"> + <member name="P:Blog.Core.Model.MessageModel.status"> <summary> - Action名称 + 状态码 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.Icon"> + <member name="P:Blog.Core.Model.MessageModel.success"> <summary> - 图标 + 操作是否成功 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.Code"> + <member name="P:Blog.Core.Model.MessageModel.msg"> <summary> - 菜单编号 + 返回信息 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.OrderSort"> + <member name="P:Blog.Core.Model.MessageModel.response"> <summary> - 排序 + 返回数据集合 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.Description"> + <member name="T:Blog.Core.Model.Models.AccessTrendLog"> <summary> - /描述 + 用户访问趋势日志 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.IsMenu"> + <member name="P:Blog.Core.Model.Models.AccessTrendLog.UserInfo"> <summary> - 是否是右侧菜单 + 用户 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.Enabled"> + <member name="P:Blog.Core.Model.Models.AccessTrendLog.Count"> <summary> - 是否激活 + 次数 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.CreateId"> + <member name="P:Blog.Core.Model.Models.AccessTrendLog.UpdateTime"> <summary> - 创建ID + 更新时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.CreateBy"> + <member name="P:Blog.Core.Model.Models.Advertisement.ImgUrl"> <summary> - 创建者 + 广告图片 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.CreateTime"> + <member name="P:Blog.Core.Model.Models.Advertisement.Title"> <summary> - 创建时间 + 广告标题 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.ModifyId"> + <member name="P:Blog.Core.Model.Models.Advertisement.Url"> <summary> - 修改ID + 广告链接 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.ModifyBy"> + <member name="P:Blog.Core.Model.Models.Advertisement.Remark"> <summary> - 修改者 + 备注 </summary> </member> - <member name="P:Blog.Core.Model.Models.Modules.ModifyTime"> + <member name="P:Blog.Core.Model.Models.Advertisement.Createdate"> <summary> - 修改时间 + 创建时间 </summary> </member> - <member name="T:Blog.Core.Model.Models.OperateLog"> + <member name="T:Blog.Core.Model.Models.BlogArticle"> <summary> - 日志记录 + 博客文章 </summary> </member> - <member name="P:Blog.Core.Model.Models.OperateLog.IsDeleted"> - <summary> - 获取或设置是否禁用,逻辑上的删除,非物理删除 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.OperateLog.Area"> + <member name="P:Blog.Core.Model.Models.BlogArticle.bID"> <summary> - 区域名 + 主键 </summary> + 这里之所以没用RootEntity,是想保持和之前的数据库一致,主键是bID,不是Id </member> - <member name="P:Blog.Core.Model.Models.OperateLog.Controller"> + <member name="P:Blog.Core.Model.Models.BlogArticle.bsubmitter"> <summary> - 区域控制器名 + 创建人 </summary> </member> - <member name="P:Blog.Core.Model.Models.OperateLog.Action"> + <member name="P:Blog.Core.Model.Models.BlogArticle.btitle"> <summary> - Action名称 + 标题blog </summary> </member> - <member name="P:Blog.Core.Model.Models.OperateLog.IPAddress"> + <member name="P:Blog.Core.Model.Models.BlogArticle.bcategory"> <summary> - IP地址 + 类别 </summary> </member> - <member name="P:Blog.Core.Model.Models.OperateLog.Description"> + <member name="P:Blog.Core.Model.Models.BlogArticle.bcontent"> <summary> - 描述 + 内容 </summary> </member> - <member name="P:Blog.Core.Model.Models.OperateLog.LogTime"> + <member name="P:Blog.Core.Model.Models.BlogArticle.btraffic"> <summary> - 登录时间 + 访问量 </summary> </member> - <member name="P:Blog.Core.Model.Models.OperateLog.LoginName"> + <member name="P:Blog.Core.Model.Models.BlogArticle.bcommentNum"> <summary> - 登录名称 + 评论数量 </summary> </member> - <member name="P:Blog.Core.Model.Models.OperateLog.UserId"> - <summary> - 用户ID + <member name="P:Blog.Core.Model.Models.BlogArticle.bUpdateTime"> + <summary> + 修改时间 </summary> </member> - <member name="T:Blog.Core.Model.Models.PasswordLib"> + <member name="P:Blog.Core.Model.Models.BlogArticle.bCreateTime"> <summary> - 密码库表 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.PasswordLib.IsDeleted"> - <summary> - 获取或设置是否禁用,逻辑上的删除,非物理删除 - </summary> - </member> - <member name="T:Blog.Core.Model.Models.Permission"> + <member name="P:Blog.Core.Model.Models.BlogArticle.bRemark"> <summary> - 路由菜单表 + 备注 </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.Code"> + <member name="P:Blog.Core.Model.Models.BlogArticle.IsDeleted"> <summary> - 菜单执行Action名 + 逻辑删除 </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.Name"> + <member name="P:Blog.Core.Model.Models.BlogArticle.Comments"> <summary> - 菜单显示名(如用户页、编辑(按钮)、删除(按钮)) + 评论 </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.IsButton"> + <member name="T:Blog.Core.Model.Models.BlogArticleComment"> <summary> - 是否是按钮 + 博客文章 评论 </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.IsHide"> + <member name="T:Blog.Core.Model.Models.Department"> <summary> - 是否是隐藏菜单 + 部门表 </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.IskeepAlive"> + <member name="P:Blog.Core.Model.Models.Department.CodeRelationship"> <summary> - 是否keepAlive + Desc:部门关系编码 + Default: + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.Func"> + <member name="P:Blog.Core.Model.Models.Department.Name"> <summary> - 按钮事件 + Desc:部门名称 + Default: + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.OrderSort"> + <member name="P:Blog.Core.Model.Models.Department.Leader"> <summary> - 排序 + Desc:负责人 + Default: + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.Icon"> + <member name="P:Blog.Core.Model.Models.Department.OrderSort"> <summary> - 菜单图标 + Desc:排序 + Default: + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.IconNew"> + <member name="P:Blog.Core.Model.Models.Department.Status"> <summary> - 菜单图标新 + Desc:部门状态(0正常 1停用) + Default:0 + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.Description"> + <member name="P:Blog.Core.Model.Models.Department.IsDeleted"> <summary> - 菜单描述 + Desc:删除标志(0代表存在 2代表删除) + Default:0 + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.Enabled"> + <member name="P:Blog.Core.Model.Models.Department.CreateBy"> <summary> - 激活状态 + Desc:创建者 + Default: + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.CreateId"> + <member name="P:Blog.Core.Model.Models.Department.CreateTime"> <summary> - 创建ID + Desc:创建时间 + Default: + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.CreateBy"> + <member name="P:Blog.Core.Model.Models.Department.ModifyBy"> <summary> - 创建者 + Desc:更新者 + Default: + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.CreateTime"> + <member name="P:Blog.Core.Model.Models.Department.ModifyTime"> <summary> - 创建时间 + Desc:更新时间 + Default: + Nullable:True </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.ModifyId"> + <member name="T:Blog.Core.Model.Models.GblLogAudit"> <summary> - 修改ID + 用户团队表 </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.ModifyBy"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.Id"> <summary> - 修改者 + ID </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.ModifyTime"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.TraceId"> <summary> - 修改时间 + HttpContext.TraceIdentifier 事件链路ID(获取或设置一个唯一标识符,用于在跟踪日志中表示此请求。) </summary> </member> - <member name="P:Blog.Core.Model.Models.Permission.IsDeleted"> - <summary> - 获取或设置是否禁用,逻辑上的删除,非物理删除 - </summary> - </member> - <member name="T:Blog.Core.Model.Models.Role"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.Date"> <summary> - 角色表 + 时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.IsDeleted"> - <summary> - 获取或设置是否禁用,逻辑上的删除,非物理删除 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.Role.Name"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.Thread"> <summary> - 角色名 + 线程 </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.Description"> - <summary> - 描述 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.Role.OrderSort"> - <summary> - 排序 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.Role.Dids"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.Level"> <summary> - 自定义权限的部门ids + 等级 </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.AuthorityScope"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.Logger"> <summary> - 权限范围 - -1 无任何权限;1 自定义权限;2 本部门;3 本部门及以下;4 仅自己;9 全部; + 记录器 </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.Enabled"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.LogType"> <summary> - 是否激活 + 日志类型 </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.CreateId"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.DataType"> <summary> - 创建ID + 数据类型 </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.CreateBy"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.Message"> <summary> - 创建者 + 错误信息 </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.CreateTime"> + <member name="P:Blog.Core.Model.Models.GblLogAudit.Exception"> <summary> - 创建时间 + 异常 </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.ModifyId"> - <summary> - 修改ID + <member name="P:Blog.Core.Model.Models.Guestbook.blogId"> + <summary>博客ID + </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.ModifyBy"> - <summary> - 修改者 + <member name="P:Blog.Core.Model.Models.Guestbook.createdate"> + <summary>创建时间 + </summary> </member> - <member name="P:Blog.Core.Model.Models.Role.ModifyTime"> - <summary> - 修改时间 + <member name="P:Blog.Core.Model.Models.Guestbook.phone"> + <summary>手机 + </summary> </member> - <member name="T:Blog.Core.Model.Models.RoleModulePermission"> + <member name="P:Blog.Core.Model.Models.Guestbook.QQ"> + <summary>qq + + </summary> + </member> + <member name="P:Blog.Core.Model.Models.Guestbook.body"> + <summary>留言内容 + + </summary> + </member> + <member name="P:Blog.Core.Model.Models.Guestbook.ip"> + <summary>ip地址 + + </summary> + </member> + <member name="P:Blog.Core.Model.Models.Guestbook.isshow"> + <summary>是否显示在前台,0否1是 + + </summary> + </member> + <member name="T:Blog.Core.Model.Models.Modules"> <summary> - 按钮跟权限关联表 + 接口API地址信息表 </summary> </member> - <member name="P:Blog.Core.Model.Models.RoleModulePermission.IsDeleted"> + <member name="P:Blog.Core.Model.Models.Modules.IsDeleted"> <summary> 获取或设置是否禁用,逻辑上的删除,非物理删除 </summary> </member> - <member name="P:Blog.Core.Model.Models.RoleModulePermission.CreateId"> + <member name="P:Blog.Core.Model.Models.Modules.Name"> + <summary> + 名称 + </summary> + </member> + <member name="P:Blog.Core.Model.Models.Modules.LinkUrl"> + <summary> + 菜单链接地址 + </summary> + </member> + <member name="P:Blog.Core.Model.Models.Modules.Area"> <summary> - 创建ID + 区域名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.RoleModulePermission.CreateBy"> + <member name="P:Blog.Core.Model.Models.Modules.Controller"> <summary> - 创建者 + 控制器名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.RoleModulePermission.CreateTime"> + <member name="P:Blog.Core.Model.Models.Modules.Action"> <summary> - 创建时间 + Action名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.RoleModulePermission.ModifyId"> + <member name="P:Blog.Core.Model.Models.Modules.Icon"> <summary> - 修改ID + 图标 </summary> </member> - <member name="P:Blog.Core.Model.Models.RoleModulePermission.ModifyBy"> + <member name="P:Blog.Core.Model.Models.Modules.Code"> <summary> - 修改者 + 菜单编号 </summary> </member> - <member name="P:Blog.Core.Model.Models.RoleModulePermission.ModifyTime"> + <member name="P:Blog.Core.Model.Models.Modules.OrderSort"> <summary> - 修改时间 + 排序 </summary> </member> - <member name="T:Blog.Core.Model.Models.SysTenant"> + <member name="P:Blog.Core.Model.Models.Modules.Description"> <summary> - 系统租户表 <br/> - 根据TenantType 分为两种方案: <br/> - 1.按租户字段区分<br/> - 2.按租户分库<br/> - - <br/> - - 注意:<br/> - 使用租户Id方案,无需配置分库的连接 + /描述 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysTenant.Name"> + <member name="P:Blog.Core.Model.Models.Modules.IsMenu"> <summary> - 名称 + 是否是右侧菜单 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysTenant.TenantType"> + <member name="P:Blog.Core.Model.Models.Modules.Enabled"> <summary> - 租户类型 + 是否激活 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysTenant.ConfigId"> + <member name="P:Blog.Core.Model.Models.Modules.CreateId"> <summary> - 数据库/租户标识 不可重复<br/> - 使用Id方案,可无需配置 + 创建ID </summary> </member> - <member name="P:Blog.Core.Model.Models.SysTenant.Host"> + <member name="P:Blog.Core.Model.Models.Modules.CreateBy"> <summary> - 主机<br/> - 使用Id方案,可无需配置 + 创建者 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysTenant.DbType"> + <member name="P:Blog.Core.Model.Models.Modules.CreateTime"> <summary> - 数据库类型<br/> - 使用Id方案,可无需配置 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysTenant.Connection"> + <member name="P:Blog.Core.Model.Models.Modules.ModifyId"> <summary> - 数据库连接<br/> - 使用Id方案,可无需配置 + 修改ID </summary> </member> - <member name="P:Blog.Core.Model.Models.SysTenant.Status"> + <member name="P:Blog.Core.Model.Models.Modules.ModifyBy"> <summary> - 状态 + 修改者 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysTenant.Remark"> + <member name="P:Blog.Core.Model.Models.Modules.ModifyTime"> <summary> - 备注 + 修改时间 </summary> </member> - <member name="T:Blog.Core.Model.Models.SysUserInfo"> + <member name="T:Blog.Core.Model.Models.OperateLog"> <summary> - 用户信息表 + 日志记录 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.LoginName"> + <member name="P:Blog.Core.Model.Models.OperateLog.IsDeleted"> + <summary> + 获取或设置是否禁用,逻辑上的删除,非物理删除 + </summary> + </member> + <member name="P:Blog.Core.Model.Models.OperateLog.Area"> <summary> - 登录账号 + 区域名 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.LoginPWD"> + <member name="P:Blog.Core.Model.Models.OperateLog.Controller"> <summary> - 登录密码 + 区域控制器名 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.RealName"> + <member name="P:Blog.Core.Model.Models.OperateLog.Action"> <summary> - 真实姓名 + Action名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.Status"> + <member name="P:Blog.Core.Model.Models.OperateLog.IPAddress"> <summary> - 状态 + IP地址 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.DepartmentId"> + <member name="P:Blog.Core.Model.Models.OperateLog.Description"> <summary> - 部门 + 描述 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.Remark"> + <member name="P:Blog.Core.Model.Models.OperateLog.LogTime"> <summary> - 备注 + 登录时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.CreateTime"> + <member name="P:Blog.Core.Model.Models.OperateLog.LoginName"> <summary> - 创建时间 + 登录名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.UpdateTime"> + <member name="P:Blog.Core.Model.Models.OperateLog.UserId"> <summary> - 更新时间 + 用户ID </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.CriticalModifyTime"> + <member name="T:Blog.Core.Model.Models.PasswordLib"> <summary> - 关键业务修改时间 + 密码库表 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.LastErrorTime"> + <member name="P:Blog.Core.Model.Models.PasswordLib.IsDeleted"> <summary> - 最后异常时间 + 获取或设置是否禁用,逻辑上的删除,非物理删除 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.ErrorCount"> - <summary> - 错误次数 - </summary> + <member name="T:Blog.Core.Model.Models.Permission"> + <summary> + 路由菜单表 + </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.Name"> + <member name="P:Blog.Core.Model.Models.Permission.Code"> <summary> - 登录账号 + 菜单执行Action名 </summary> </member> - <member name="P:Blog.Core.Model.Models.SysUserInfo.TenantId"> + <member name="P:Blog.Core.Model.Models.Permission.Name"> <summary> - 租户Id + 菜单显示名(如用户页、编辑(按钮)、删除(按钮)) </summary> </member> - <member name="T:Blog.Core.Model.Models.TasksLog"> + <member name="P:Blog.Core.Model.Models.Permission.IsButton"> <summary> - 任务日志表 + 是否是按钮 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.JobId"> + <member name="P:Blog.Core.Model.Models.Permission.IsHide"> <summary> - 任务ID + 是否是隐藏菜单 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.TotalTime"> + <member name="P:Blog.Core.Model.Models.Permission.IskeepAlive"> <summary> - 任务耗时 + 是否keepAlive </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.RunResult"> + <member name="P:Blog.Core.Model.Models.Permission.Func"> <summary> - 执行结果(0-失败 1-成功) + 按钮事件 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.RunTime"> + <member name="P:Blog.Core.Model.Models.Permission.OrderSort"> <summary> - 运行时间 + 排序 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.EndTime"> + <member name="P:Blog.Core.Model.Models.Permission.Icon"> <summary> - 结束时间 + 菜单图标 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.RunPars"> + <member name="P:Blog.Core.Model.Models.Permission.IconNew"> <summary> - 执行参数 + 菜单图标新 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.ErrMessage"> + <member name="P:Blog.Core.Model.Models.Permission.Description"> <summary> - 异常信息 + 菜单描述 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.ErrStackTrace"> + <member name="P:Blog.Core.Model.Models.Permission.Enabled"> <summary> - 异常堆栈 + 激活状态 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.CreateId"> + <member name="P:Blog.Core.Model.Models.Permission.CreateId"> <summary> 创建ID </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.CreateBy"> + <member name="P:Blog.Core.Model.Models.Permission.CreateBy"> <summary> 创建者 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.CreateTime"> + <member name="P:Blog.Core.Model.Models.Permission.CreateTime"> <summary> 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.ModifyId"> + <member name="P:Blog.Core.Model.Models.Permission.ModifyId"> <summary> 修改ID </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.ModifyBy"> + <member name="P:Blog.Core.Model.Models.Permission.ModifyBy"> <summary> 修改者 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.ModifyTime"> + <member name="P:Blog.Core.Model.Models.Permission.ModifyTime"> <summary> 修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksLog.Name"> - <summary> - 任务名称 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.TasksLog.JobGroup"> - <summary> - 任务分组 - </summary> - </member> - <member name="T:Blog.Core.Model.Models.TasksQz"> - <summary> - 任务计划表 - </summary> - </member> - <member name="P:Blog.Core.Model.Models.TasksQz.Name"> - <summary> - 任务名称 - </summary> + <member name="P:Blog.Core.Model.Models.Permission.IsDeleted"> + <summary> + 获取或设置是否禁用,逻辑上的删除,非物理删除 + </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.JobGroup"> + <member name="T:Blog.Core.Model.Models.Role"> <summary> - 任务分组 + 角色表 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.Cron"> - <summary> - 任务运行时间表达式 - </summary> + <member name="P:Blog.Core.Model.Models.Role.IsDeleted"> + <summary> + 获取或设置是否禁用,逻辑上的删除,非物理删除 + </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.AssemblyName"> + <member name="P:Blog.Core.Model.Models.Role.Name"> <summary> - 任务所在DLL对应的程序集名称 + 角色名 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.ClassName"> - <summary> - 任务所在类 - </summary> + <member name="P:Blog.Core.Model.Models.Role.Description"> + <summary> + 描述 + </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.Remark"> - <summary> - 任务描述 - </summary> + <member name="P:Blog.Core.Model.Models.Role.OrderSort"> + <summary> + 排序 + </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.RunTimes"> + <member name="P:Blog.Core.Model.Models.Role.Dids"> <summary> - 执行次数 + 自定义权限的部门ids </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.BeginTime"> + <member name="P:Blog.Core.Model.Models.Role.AuthorityScope"> <summary> - 开始时间 + 权限范围 + -1 无任何权限;1 自定义权限;2 本部门;3 本部门及以下;4 仅自己;9 全部; </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.EndTime"> + <member name="P:Blog.Core.Model.Models.Role.Enabled"> <summary> - 结束时间 + 是否激活 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.TriggerType"> + <member name="P:Blog.Core.Model.Models.Role.CreateId"> <summary> - 触发器类型(0、simple 1、cron) + 创建ID </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.IntervalSecond"> + <member name="P:Blog.Core.Model.Models.Role.CreateBy"> <summary> - 执行间隔时间, 秒为单位 + 创建者 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.CycleRunTimes"> + <member name="P:Blog.Core.Model.Models.Role.CreateTime"> <summary> - 循环执行次数 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.CycleHasRunTimes"> + <member name="P:Blog.Core.Model.Models.Role.ModifyId"> <summary> - 已循环次数 + 修改ID </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.IsStart"> + <member name="P:Blog.Core.Model.Models.Role.ModifyBy"> <summary> - 是否启动 + 修改者 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.JobParams"> + <member name="P:Blog.Core.Model.Models.Role.ModifyTime"> <summary> - 执行传参 + 修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.CreateTime"> + <member name="T:Blog.Core.Model.Models.RoleModulePermission"> <summary> - 创建时间 + 按钮跟权限关联表 </summary> </member> - <member name="P:Blog.Core.Model.Models.TasksQz.Triggers"> + <member name="P:Blog.Core.Model.Models.RoleModulePermission.IsDeleted"> + <summary> + 获取或设置是否禁用,逻辑上的删除,非物理删除 + </summary> + </member> + <member name="P:Blog.Core.Model.Models.RoleModulePermission.CreateId"> <summary> - 任务内存中的状态 + 创建ID </summary> </member> - <member name="T:Blog.Core.Model.Models.BusinessTable"> + <member name="P:Blog.Core.Model.Models.RoleModulePermission.CreateBy"> <summary> - 业务数据 <br/> - 多租户 (Id 隔离) + 创建者 </summary> </member> - <member name="P:Blog.Core.Model.Models.BusinessTable.TenantId"> + <member name="P:Blog.Core.Model.Models.RoleModulePermission.CreateTime"> <summary> - 无需手动赋值 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.BusinessTable.Name"> + <member name="P:Blog.Core.Model.Models.RoleModulePermission.ModifyId"> <summary> - 名称 + 修改ID </summary> </member> - <member name="P:Blog.Core.Model.Models.BusinessTable.Amount"> + <member name="P:Blog.Core.Model.Models.RoleModulePermission.ModifyBy"> <summary> - 金额 + 修改者 </summary> </member> - <member name="T:Blog.Core.Model.Models.MultiBusinessSubTable"> + <member name="P:Blog.Core.Model.Models.RoleModulePermission.ModifyTime"> <summary> - 多租户-多表方案 业务表 子表 <br/> + 修改时间 </summary> </member> - <member name="T:Blog.Core.Model.Models.MultiBusinessTable"> + <member name="T:Blog.Core.Model.Models.SysTenant"> <summary> - 多租户-多表方案 业务表 <br/> + 系统租户表 <br/> + 根据TenantType 分为两种方案: <br/> + 1.按租户字段区分<br/> + 2.按租户分库<br/> + + <br/> + + 注意:<br/> + 使用租户Id方案,无需配置分库的连接 </summary> </member> - <member name="P:Blog.Core.Model.Models.MultiBusinessTable.Name"> + <member name="P:Blog.Core.Model.Models.SysTenant.Name"> <summary> 名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.MultiBusinessTable.Amount"> + <member name="P:Blog.Core.Model.Models.SysTenant.TenantType"> <summary> - 金额 + 租户类型 </summary> </member> - <member name="P:Blog.Core.Model.Models.MultiBusinessTable.Remark"> + <member name="P:Blog.Core.Model.Models.SysTenant.ConfigId"> <summary> - 备注(测试增加字段,多表迁移) + 数据库/租户标识 不可重复<br/> + 使用Id方案,可无需配置 </summary> </member> - <member name="T:Blog.Core.Model.Models.SubLibraryBusinessTable"> + <member name="P:Blog.Core.Model.Models.SysTenant.Host"> <summary> - 多租户-多库方案 业务表 <br/> - 公共库无需标记[MultiTenant]特性 + 主机<br/> + 使用Id方案,可无需配置 </summary> </member> - <member name="P:Blog.Core.Model.Models.SubLibraryBusinessTable.Name"> + <member name="P:Blog.Core.Model.Models.SysTenant.DbType"> <summary> - 名称 + 数据库类型<br/> + 使用Id方案,可无需配置 </summary> </member> - <member name="P:Blog.Core.Model.Models.SubLibraryBusinessTable.Amount"> + <member name="P:Blog.Core.Model.Models.SysTenant.Connection"> <summary> - 金额 + 数据库连接<br/> + 使用Id方案,可无需配置 </summary> </member> - <member name="P:Blog.Core.Model.Models.SubLibraryBusinessTable.Remark"> + <member name="P:Blog.Core.Model.Models.SysTenant.Status"> <summary> - 备注(测试增加字段,多库迁移) + 状态 </summary> </member> - <member name="T:Blog.Core.Model.Models.Topic"> + <member name="P:Blog.Core.Model.Models.SysTenant.Remark"> <summary> - Tibug 类别 + 备注 </summary> </member> - <member name="T:Blog.Core.Model.Models.TopicDetail"> + <member name="T:Blog.Core.Model.Models.SysUserInfo"> <summary> - Tibug 博文 + 用户信息表 </summary> </member> - <member name="T:Blog.Core.Model.Models.UserRole"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.LoginName"> <summary> - 用户跟角色关联表 + 登录账号 </summary> </member> - <member name="P:Blog.Core.Model.Models.UserRole.IsDeleted"> - <summary> - 获取或设置是否禁用,逻辑上的删除,非物理删除 - </summary> + <member name="P:Blog.Core.Model.Models.SysUserInfo.LoginPWD"> + <summary> + 登录密码 + </summary> </member> - <member name="P:Blog.Core.Model.Models.UserRole.CreateId"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.RealName"> <summary> - 创建ID + 真实姓名 </summary> </member> - <member name="P:Blog.Core.Model.Models.UserRole.CreateBy"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.Status"> <summary> - 创建者 + 状态 </summary> </member> - <member name="P:Blog.Core.Model.Models.UserRole.CreateTime"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.DepartmentId"> <summary> - 创建时间 + 部门 </summary> </member> - <member name="P:Blog.Core.Model.Models.UserRole.ModifyId"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.Remark"> <summary> - 修改ID + 备注 </summary> </member> - <member name="P:Blog.Core.Model.Models.UserRole.ModifyBy"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.CreateTime"> <summary> - 修改者 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.UserRole.ModifyTime"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.UpdateTime"> <summary> - 修改时间 + 更新时间 </summary> </member> - <member name="T:Blog.Core.Model.Models.WeChatCompany"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.CriticalModifyTime"> <summary> - + 关键业务修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyID"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.LastErrorTime"> + <summary> + 最后异常时间 + </summary> + </member> + <member name="P:Blog.Core.Model.Models.SysUserInfo.ErrorCount"> + <summary> + 错误次数 + </summary> + </member> + <member name="P:Blog.Core.Model.Models.SysUserInfo.Name"> <summary> - 公司ID - </summary> + 登录账号 + </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyName"> + <member name="P:Blog.Core.Model.Models.SysUserInfo.TenantId"> <summary> - 公司名称 + 租户Id </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyIP"> + <member name="T:Blog.Core.Model.Models.TasksLog"> <summary> - 公司IP + 任务日志表 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyRemark"> + <member name="P:Blog.Core.Model.Models.TasksLog.JobId"> <summary> - 公司备注 + 任务ID </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyAPI"> + <member name="P:Blog.Core.Model.Models.TasksLog.TotalTime"> <summary> - api地址 + 任务耗时 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.Enabled"> + <member name="P:Blog.Core.Model.Models.TasksLog.RunResult"> <summary> - 是否激活 + 执行结果(0-失败 1-成功) </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.CreateId"> + <member name="P:Blog.Core.Model.Models.TasksLog.RunTime"> <summary> - 创建者id + 运行时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.CreateBy"> + <member name="P:Blog.Core.Model.Models.TasksLog.EndTime"> <summary> - 创建人 + 结束时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.CreateTime"> + <member name="P:Blog.Core.Model.Models.TasksLog.RunPars"> <summary> - 创建时间 + 执行参数 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.ModifyId"> + <member name="P:Blog.Core.Model.Models.TasksLog.ErrMessage"> <summary> - 修改者id + 异常信息 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.ModifyBy"> + <member name="P:Blog.Core.Model.Models.TasksLog.ErrStackTrace"> <summary> - 修改人 + 异常堆栈 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatCompany.ModifyTime"> + <member name="P:Blog.Core.Model.Models.TasksLog.CreateId"> <summary> - 修改时间 + 创建ID </summary> </member> - <member name="T:Blog.Core.Model.Models.WeChatConfig"> + <member name="P:Blog.Core.Model.Models.TasksLog.CreateBy"> <summary> - + 创建者 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.publicAccount"> + <member name="P:Blog.Core.Model.Models.TasksLog.CreateTime"> <summary> - 微信公众号唯一标识 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.publicNick"> + <member name="P:Blog.Core.Model.Models.TasksLog.ModifyId"> <summary> - 微信公众号名称 + 修改ID </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.weChatAccount"> + <member name="P:Blog.Core.Model.Models.TasksLog.ModifyBy"> <summary> - 微信账号 + 修改者 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.weChatNick"> + <member name="P:Blog.Core.Model.Models.TasksLog.ModifyTime"> <summary> - 微信名称 + 修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.appid"> + <member name="P:Blog.Core.Model.Models.TasksLog.Name"> <summary> - 应用ID + 任务名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.appsecret"> + <member name="P:Blog.Core.Model.Models.TasksLog.JobGroup"> <summary> - 应用秘钥 + 任务分组 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.token"> + <member name="T:Blog.Core.Model.Models.TasksQz"> <summary> - 公众号推送token + 任务计划表 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.interactiveToken"> + <member name="P:Blog.Core.Model.Models.TasksQz.Name"> <summary> - 验证秘钥(验证消息是否真实) + 任务名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.tokenExpiration"> + <member name="P:Blog.Core.Model.Models.TasksQz.JobGroup"> <summary> - 微信公众号token过期时间 + 任务分组 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.remark"> + <member name="P:Blog.Core.Model.Models.TasksQz.Cron"> <summary> - 备注 + 任务运行时间表达式 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.Enabled"> + <member name="P:Blog.Core.Model.Models.TasksQz.AssemblyName"> <summary> - 是否激活 + 任务所在DLL对应的程序集名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.CreateId"> + <member name="P:Blog.Core.Model.Models.TasksQz.ClassName"> <summary> - 创建者id + 任务所在类 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.CreateBy"> + <member name="P:Blog.Core.Model.Models.TasksQz.Remark"> <summary> - 创建人 + 任务描述 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.CreateTime"> + <member name="P:Blog.Core.Model.Models.TasksQz.RunTimes"> <summary> - 创建时间 + 执行次数 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.ModifyId"> + <member name="P:Blog.Core.Model.Models.TasksQz.BeginTime"> <summary> - 修改者id + 开始时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.ModifyBy"> + <member name="P:Blog.Core.Model.Models.TasksQz.EndTime"> <summary> - 修改人 + 结束时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatConfig.ModifyTime"> + <member name="P:Blog.Core.Model.Models.TasksQz.TriggerType"> <summary> - 修改时间 + 触发器类型(0、simple 1、cron) </summary> </member> - <member name="T:Blog.Core.Model.Models.WeChatPushLog"> + <member name="P:Blog.Core.Model.Models.TasksQz.IntervalSecond"> <summary> - + 执行间隔时间, 秒为单位 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.id"> + <member name="P:Blog.Core.Model.Models.TasksQz.CycleRunTimes"> <summary> - 推送ID + 循环执行次数 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogFrom"> + <member name="P:Blog.Core.Model.Models.TasksQz.CycleHasRunTimes"> <summary> - 来自谁 + 已循环次数 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogIP"> + <member name="P:Blog.Core.Model.Models.TasksQz.IsStart"> <summary> - 推送IP + 是否启动 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogCompanyID"> + <member name="P:Blog.Core.Model.Models.TasksQz.JobParams"> <summary> - 推送客户 + 执行传参 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogToUserID"> + <member name="P:Blog.Core.Model.Models.TasksQz.CreateTime"> <summary> - 推送用户 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogTemplateID"> + <member name="P:Blog.Core.Model.Models.TasksQz.Triggers"> <summary> - 推送模板ID + 任务内存中的状态 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogContent"> + <member name="T:Blog.Core.Model.Models.Tenant.BusinessTable"> <summary> - 推送内容 + 业务数据 <br/> + 多租户 (Id 隔离) </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogTime"> + <member name="P:Blog.Core.Model.Models.Tenant.BusinessTable.TenantId"> <summary> - 推送时间 + 无需手动赋值 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogStatus"> + <member name="P:Blog.Core.Model.Models.Tenant.BusinessTable.Name"> <summary> - 推送状态(Y/N) + 名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogRemark"> + <member name="P:Blog.Core.Model.Models.Tenant.BusinessTable.Amount"> <summary> - 备注 + 金额 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogOpenid"> + <member name="T:Blog.Core.Model.Models.Tenant.MultiBusinessSubTable"> <summary> - 推送OpenID + 多租户-多表方案 业务表 子表 <br/> </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogPublicAccount"> + <member name="T:Blog.Core.Model.Models.Tenant.MultiBusinessTable"> <summary> - 推送微信公众号 + 多租户-多表方案 业务表 <br/> </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.CreateId"> + <member name="P:Blog.Core.Model.Models.Tenant.MultiBusinessTable.Name"> <summary> - 创建者id + 名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.CreateBy"> + <member name="P:Blog.Core.Model.Models.Tenant.MultiBusinessTable.Amount"> <summary> - 创建人 + 金额 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.CreateTime"> + <member name="P:Blog.Core.Model.Models.Tenant.MultiBusinessTable.Remark"> <summary> - 创建时间 + 备注(测试增加字段,多表迁移) </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.ModifyId"> + <member name="T:Blog.Core.Model.Models.Tenant.SubLibraryBusinessTable"> <summary> - 修改者id + 多租户-多库方案 业务表 <br/> + 公共库无需标记[MultiTenant]特性 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.ModifyBy"> + <member name="P:Blog.Core.Model.Models.Tenant.SubLibraryBusinessTable.Name"> <summary> - 修改人 + 名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatPushLog.ModifyTime"> + <member name="P:Blog.Core.Model.Models.Tenant.SubLibraryBusinessTable.Amount"> <summary> - 修改时间 + 金额 </summary> </member> - <member name="T:Blog.Core.Model.Models.WeChatQR"> + <member name="P:Blog.Core.Model.Models.Tenant.SubLibraryBusinessTable.Remark"> <summary> - + 备注(测试增加字段,多库迁移) </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRticket"> + <member name="T:Blog.Core.Model.Models.Topic"> <summary> - 主键id,ticket + Tibug 类别 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRbindCompanyID"> + <member name="T:Blog.Core.Model.Models.TopicDetail"> <summary> - 需要绑定的公司 + Tibug 博文 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRbindJobID"> + <member name="T:Blog.Core.Model.Models.UserRole"> <summary> - 需要绑定的员工id + 用户跟角色关联表 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRbindJobNick"> + <member name="P:Blog.Core.Model.Models.UserRole.IsDeleted"> + <summary> + 获取或设置是否禁用,逻辑上的删除,非物理删除 + </summary> + </member> + <member name="P:Blog.Core.Model.Models.UserRole.CreateId"> <summary> - 需要绑定的员工昵称 + 创建ID </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRcrateTime"> + <member name="P:Blog.Core.Model.Models.UserRole.CreateBy"> <summary> - 创建时间 + 创建者 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRpublicAccount"> + <member name="P:Blog.Core.Model.Models.UserRole.CreateTime"> <summary> - 关联的公众号 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRisUsed"> + <member name="P:Blog.Core.Model.Models.UserRole.ModifyId"> <summary> - 是否已使用 + 修改ID </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRuseTime"> + <member name="P:Blog.Core.Model.Models.UserRole.ModifyBy"> <summary> - 使用时间 + 修改者 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.QRuseOpenid"> + <member name="P:Blog.Core.Model.Models.UserRole.ModifyTime"> <summary> - 关联的微信用户id + 修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.CreateId"> + <member name="T:Blog.Core.Model.Models.WeChatCompany"> <summary> - 创建者id + </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.CreateBy"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyID"> <summary> - 创建人 - </summary> + 公司ID + </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.CreateTime"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyName"> <summary> - 创建时间 + 公司名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.ModifyId"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyIP"> <summary> - 修改者id + 公司IP </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.ModifyBy"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyRemark"> <summary> - 修改人 + 公司备注 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatQR.ModifyTime"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.CompanyAPI"> <summary> - 修改时间 + api地址 </summary> </member> - <member name="T:Blog.Core.Model.Models.WeChatSub"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.Enabled"> <summary> - + 是否激活 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.SubFromPublicAccount"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.CreateId"> <summary> - 来自哪个公众号 + 创建者id </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.CompanyID"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.CreateBy"> <summary> - 绑定公司id + 创建人 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.SubJobID"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.CreateTime"> <summary> - 绑定员工id + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserOpenID"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.ModifyId"> <summary> - 绑定微信id + 修改者id </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserUnionID"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.ModifyBy"> <summary> - 绑定微信联合id + 修改人 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserRegTime"> + <member name="P:Blog.Core.Model.Models.WeChatCompany.ModifyTime"> <summary> - 绑定时间 + 修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserRefTime"> + <member name="T:Blog.Core.Model.Models.WeChatConfig"> <summary> - 更新时间 + </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserRemark"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.publicAccount"> <summary> - 备注 + 微信公众号唯一标识 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.IsUnBind"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.publicNick"> <summary> - 是否已解绑 + 微信公众号名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.LastSubUserOpenID"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.weChatAccount"> <summary> - 上次绑定微信id + 微信账号 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.CreateId"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.weChatNick"> <summary> - 创建者id + 微信名称 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.CreateBy"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.appid"> <summary> - 创建人 + 应用ID </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.CreateTime"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.appsecret"> <summary> - 创建时间 + 应用秘钥 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.ModifyId"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.token"> <summary> - 修改者id + 公众号推送token </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.ModifyBy"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.interactiveToken"> <summary> - 修改人 + 验证秘钥(验证消息是否真实) </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatSub.ModifyTime"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.tokenExpiration"> <summary> - 修改时间 + 微信公众号token过期时间 </summary> </member> - <member name="T:Blog.Core.Model.Models.WeChatUploadFile"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.remark"> <summary> - + 备注 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileID"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.Enabled"> <summary> - 文件ID + 是否激活 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileName"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.CreateId"> <summary> - 文件名称 + 创建者id </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileSize"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.CreateBy"> <summary> - 文件大小 + 创建人 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileContentType"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.CreateTime"> <summary> - 文件类型 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileExtension"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.ModifyId"> <summary> - 文件拓展名 + 修改者id </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFilePosition"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.ModifyBy"> <summary> - 文件位置 + 修改人 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileTime"> + <member name="P:Blog.Core.Model.Models.WeChatConfig.ModifyTime"> <summary> - 文件上传时间 + 修改时间 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileRemark"> + <member name="T:Blog.Core.Model.Models.WeChatPushLog"> <summary> - 文件备注 + </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.CreateId"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.id"> <summary> - 创建者id + 推送ID </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.CreateBy"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogFrom"> <summary> - 创建人 + 来自谁 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.CreateTime"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogIP"> <summary> - 创建时间 + 推送IP </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.ModifyId"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogCompanyID"> <summary> - 修改者id + 推送客户 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.ModifyBy"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogToUserID"> <summary> - 修改人 + 推送用户 </summary> </member> - <member name="P:Blog.Core.Model.Models.WeChatUploadFile.ModifyTime"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogTemplateID"> <summary> - 修改时间 + 推送模板ID </summary> </member> - <member name="T:Blog.Core.Model.DepartmentRoot`1"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogContent"> <summary> - 部门表 + 推送内容 </summary> </member> - <member name="P:Blog.Core.Model.DepartmentRoot`1.Pid"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogTime"> <summary> - 上一级(0表示无上一级) + 推送时间 </summary> </member> - <member name="T:Blog.Core.Model.ModulesRoot`1"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogStatus"> <summary> - 接口API地址信息表 - 父类 + 推送状态(Y/N) </summary> </member> - <member name="P:Blog.Core.Model.ModulesRoot`1.ParentId"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogRemark"> <summary> - 父ID + 备注 </summary> </member> - <member name="T:Blog.Core.Model.PermissionRoot`1"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogOpenid"> <summary> - 路由菜单表 + 推送OpenID </summary> </member> - <member name="P:Blog.Core.Model.PermissionRoot`1.Pid"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.PushLogPublicAccount"> <summary> - 上一级菜单(0表示上一级无菜单) + 推送微信公众号 </summary> </member> - <member name="P:Blog.Core.Model.PermissionRoot`1.Mid"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.CreateId"> <summary> - 接口api + 创建者id </summary> </member> - <member name="T:Blog.Core.Model.RoleModulePermissionRoot`1"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.CreateBy"> <summary> - 按钮跟权限关联表 - 父类 + 创建人 </summary> </member> - <member name="P:Blog.Core.Model.RoleModulePermissionRoot`1.RoleId"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.CreateTime"> <summary> - 角色ID + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.RoleModulePermissionRoot`1.ModuleId"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.ModifyId"> <summary> - 菜单ID + 修改者id </summary> </member> - <member name="P:Blog.Core.Model.RoleModulePermissionRoot`1.PermissionId"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.ModifyBy"> <summary> - api ID + 修改人 </summary> </member> - <member name="P:Blog.Core.Model.RootEntityTkey`1.Id"> + <member name="P:Blog.Core.Model.Models.WeChatPushLog.ModifyTime"> <summary> - ID - 泛型主键Tkey + 修改时间 </summary> </member> - <member name="T:Blog.Core.Model.SysUserInfoRoot`1"> + <member name="T:Blog.Core.Model.Models.WeChatQR"> <summary> - 用户信息表 + </summary> </member> - <member name="P:Blog.Core.Model.SysUserInfoRoot`1.Id"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRticket"> <summary> - Id - 泛型主键Tkey + 主键id,ticket </summary> </member> - <member name="T:Blog.Core.Model.TopicDetailRoot`1"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRbindCompanyID"> <summary> - Tibug 博文 + 需要绑定的公司 </summary> </member> - <member name="T:Blog.Core.Model.UserRoleRoot`1"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRbindJobID"> <summary> - 用户跟角色关联表 - 父类 + 需要绑定的员工id </summary> </member> - <member name="P:Blog.Core.Model.UserRoleRoot`1.UserId"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRbindJobNick"> <summary> - 用户ID + 需要绑定的员工昵称 </summary> </member> - <member name="P:Blog.Core.Model.UserRoleRoot`1.RoleId"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRcrateTime"> <summary> - 角色ID + 创建时间 </summary> </member> - <member name="T:Blog.Core.Model.Tenants.ITenantEntity"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRpublicAccount"> <summary> - 租户模型接口 + 关联的公众号 </summary> </member> - <member name="P:Blog.Core.Model.Tenants.ITenantEntity.TenantId"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRisUsed"> <summary> - 租户Id + 是否已使用 </summary> </member> - <member name="T:Blog.Core.Model.Tenants.MultiTenantAttribute"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRuseTime"> <summary> - 标识 多租户 的业务表 <br/> - 默认设置是多库 <br/> - 公共表无需区分 直接使用主库 各自业务在各自库中 <br/> + 使用时间 </summary> </member> - <member name="T:Blog.Core.Model.Tenants.TenantTypeEnum"> + <member name="P:Blog.Core.Model.Models.WeChatQR.QRuseOpenid"> <summary> - 租户隔离方案 + 关联的微信用户id </summary> </member> - <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Id"> + <member name="P:Blog.Core.Model.Models.WeChatQR.CreateId"> <summary> - Id隔离 + 创建者id </summary> </member> - <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Db"> + <member name="P:Blog.Core.Model.Models.WeChatQR.CreateBy"> <summary> - 库隔离 + 创建人 </summary> </member> - <member name="F:Blog.Core.Model.Tenants.TenantTypeEnum.Tables"> + <member name="P:Blog.Core.Model.Models.WeChatQR.CreateTime"> <summary> - 表隔离 + 创建时间 </summary> </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.NONE"> + <member name="P:Blog.Core.Model.Models.WeChatQR.ModifyId"> <summary> - 无任何权限 + 修改者id </summary> </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.Custom"> + <member name="P:Blog.Core.Model.Models.WeChatQR.ModifyBy"> <summary> - 自定义权限 + 修改人 </summary> </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.MyDepart"> + <member name="P:Blog.Core.Model.Models.WeChatQR.ModifyTime"> <summary> - 本部门 + 修改时间 </summary> </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.MyDepartAndDown"> + <member name="T:Blog.Core.Model.Models.WeChatSub"> <summary> - 本部门及以下 + </summary> </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.OnlySelf"> + <member name="P:Blog.Core.Model.Models.WeChatSub.SubFromPublicAccount"> <summary> - 仅自己 + 来自哪个公众号 </summary> </member> - <member name="F:Blog.Core.Model.AuthorityScopeEnum.ALL"> + <member name="P:Blog.Core.Model.Models.WeChatSub.CompanyID"> <summary> - 所有 + 绑定公司id </summary> </member> - <member name="T:Blog.Core.Model.IDS4DbModels.ApplicationRole"> + <member name="P:Blog.Core.Model.Models.WeChatSub.SubJobID"> <summary> - 以下model 来自ids4项目,多库模式,为了调取ids4数据 - 角色表 + 绑定员工id </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.OrderSort"> - <summary> - 排序 - </summary> + <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserOpenID"> + <summary> + 绑定微信id + </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.Enabled"> + <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserUnionID"> <summary> - 是否激活 + 绑定微信联合id </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateId"> + <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserRegTime"> <summary> - 创建ID + 绑定时间 </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateBy"> + <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserRefTime"> <summary> - 创建者 + 更新时间 </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.CreateTime"> + <member name="P:Blog.Core.Model.Models.WeChatSub.SubUserRemark"> <summary> - 创建时间 + 备注 </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyId"> + <member name="P:Blog.Core.Model.Models.WeChatSub.IsUnBind"> <summary> - 修改ID + 是否已解绑 </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyBy"> + <member name="P:Blog.Core.Model.Models.WeChatSub.LastSubUserOpenID"> <summary> - 修改者 + 上次绑定微信id </summary> </member> - <member name="P:Blog.Core.Model.IDS4DbModels.ApplicationRole.ModifyTime"> + <member name="P:Blog.Core.Model.Models.WeChatSub.CreateId"> <summary> - 修改时间 + 创建者id </summary> </member> - <member name="T:Blog.Core.Model.IDS4DbModels.ApplicationUser"> + <member name="P:Blog.Core.Model.Models.WeChatSub.CreateBy"> <summary> - 以下model 来自ids4项目,多库模式,为了调取ids4数据 - 用户表 + 创建人 </summary> </member> - <member name="T:Blog.Core.Model.Love"> + <member name="P:Blog.Core.Model.Models.WeChatSub.CreateTime"> <summary> - 这是爱 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.Love.Id"> + <member name="P:Blog.Core.Model.Models.WeChatSub.ModifyId"> <summary> - id + 修改者id </summary> </member> - <member name="P:Blog.Core.Model.Love.Name"> + <member name="P:Blog.Core.Model.Models.WeChatSub.ModifyBy"> <summary> - 姓名 + 修改人 </summary> </member> - <member name="P:Blog.Core.Model.Love.Age"> + <member name="P:Blog.Core.Model.Models.WeChatSub.ModifyTime"> <summary> - 年龄 + 修改时间 </summary> </member> - <member name="T:Blog.Core.Model.MessageModel`1"> + <member name="T:Blog.Core.Model.Models.WeChatUploadFile"> <summary> - 通用返回信息类 + </summary> </member> - <member name="P:Blog.Core.Model.MessageModel`1.status"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileID"> <summary> - 状态码 + 文件ID </summary> </member> - <member name="P:Blog.Core.Model.MessageModel`1.success"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileName"> <summary> - 操作是否成功 + 文件名称 </summary> </member> - <member name="P:Blog.Core.Model.MessageModel`1.msg"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileSize"> <summary> - 返回信息 + 文件大小 </summary> </member> - <member name="P:Blog.Core.Model.MessageModel`1.msgDev"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileContentType"> <summary> - 开发者信息 + 文件类型 </summary> </member> - <member name="P:Blog.Core.Model.MessageModel`1.response"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileExtension"> <summary> - 返回数据集合 + 文件拓展名 </summary> </member> - <member name="M:Blog.Core.Model.MessageModel`1.Success(System.String)"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFilePosition"> <summary> - 返回成功 + 文件位置 </summary> - <param name="msg">消息</param> - <returns></returns> </member> - <member name="M:Blog.Core.Model.MessageModel`1.Success(System.String,`0)"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileTime"> <summary> - 返回成功 + 文件上传时间 </summary> - <param name="msg">消息</param> - <param name="response">数据</param> - <returns></returns> </member> - <member name="M:Blog.Core.Model.MessageModel`1.Fail(System.String)"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.UploadFileRemark"> <summary> - 返回失败 + 文件备注 </summary> - <param name="msg">消息</param> - <returns></returns> </member> - <member name="M:Blog.Core.Model.MessageModel`1.Fail(System.String,`0)"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.CreateId"> <summary> - 返回失败 + 创建者id </summary> - <param name="msg">消息</param> - <param name="response">数据</param> - <returns></returns> </member> - <member name="M:Blog.Core.Model.MessageModel`1.Message(System.Boolean,System.String,`0)"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.CreateBy"> <summary> - 返回消息 + 创建人 </summary> - <param name="success">失败/成功</param> - <param name="msg">消息</param> - <param name="response">数据</param> - <returns></returns> </member> - <member name="P:Blog.Core.Model.MessageModel.status"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.CreateTime"> <summary> - 状态码 + 创建时间 </summary> </member> - <member name="P:Blog.Core.Model.MessageModel.success"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.ModifyId"> <summary> - 操作是否成功 + 修改者id </summary> </member> - <member name="P:Blog.Core.Model.MessageModel.msg"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.ModifyBy"> <summary> - 返回信息 + 修改人 </summary> </member> - <member name="P:Blog.Core.Model.MessageModel.response"> + <member name="P:Blog.Core.Model.Models.WeChatUploadFile.ModifyTime"> <summary> - 返回数据集合 + 修改时间 </summary> </member> <member name="T:Blog.Core.Model.PageModel`1"> diff --git a/Blog.Core.Api/Blog.Core.xml b/Blog.Core.Api/Blog.Core.xml index 5a36963c..522510b9 100644 --- a/Blog.Core.Api/Blog.Core.xml +++ b/Blog.Core.Api/Blog.Core.xml @@ -1444,7 +1444,7 @@ </summary> <returns></returns> </member> - <member name="M:Blog.Core.Api.Controllers.Tenant.TenantByDbController.Post(Blog.Core.Model.Models.SubLibraryBusinessTable)"> + <member name="M:Blog.Core.Api.Controllers.Tenant.TenantByDbController.Post(Blog.Core.Model.Models.Tenant.SubLibraryBusinessTable)"> <summary> 新增数据 </summary> @@ -1461,7 +1461,7 @@ </summary> <returns></returns> </member> - <member name="M:Blog.Core.Api.Controllers.Tenant.TenantByIdController.Post(Blog.Core.Model.Models.BusinessTable)"> + <member name="M:Blog.Core.Api.Controllers.Tenant.TenantByIdController.Post(Blog.Core.Model.Models.Tenant.BusinessTable)"> <summary> 新增业务数据 </summary> @@ -1478,7 +1478,7 @@ </summary> <returns></returns> </member> - <member name="M:Blog.Core.Api.Controllers.Tenant.TenantByTableController.Post(Blog.Core.Model.Models.MultiBusinessTable)"> + <member name="M:Blog.Core.Api.Controllers.Tenant.TenantByTableController.Post(Blog.Core.Model.Models.Tenant.MultiBusinessTable)"> <summary> 新增数据 </summary> diff --git a/Blog.Core.Common/Seed/DBSeed.cs b/Blog.Core.Common/Seed/DBSeed.cs index 4435914d..4c297e4f 100644 --- a/Blog.Core.Common/Seed/DBSeed.cs +++ b/Blog.Core.Common/Seed/DBSeed.cs @@ -93,7 +93,7 @@ public static async Task SeedAsync(MyContext myContext, string webRootPath) var modelTypes = referencedAssemblies .SelectMany(a => a.DefinedTypes) .Select(type => type.AsType()) - .Where(x => x.IsClass && x.Namespace is "Blog.Core.Model.Models") + .Where(x => x.IsClass && x.Namespace != null && x.Namespace.StartsWith("Blog.Core.Model.Models")) .Where(s => !s.IsDefined(typeof(MultiTenantAttribute), false)) .ToList(); await MigrateCore.MigrateAsync(db, modelTypes.ToArray()); From 0960f8eee70ffb53846b1b5f12bff002f13baa7b Mon Sep 17 00:00:00 2001 From: LemonNoCry <ningmengbuku@outlook.com> Date: Tue, 31 Dec 2024 16:23:57 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E2=9C=A8=E5=A2=9E=E5=8A=A0=E5=88=86?= =?UTF-8?q?=E8=A1=A8=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SplitDemoController.cs | 322 ++++++++++-------- 1 file changed, 182 insertions(+), 140 deletions(-) diff --git a/Blog.Core.Api/Controllers/SplitDemoController.cs b/Blog.Core.Api/Controllers/SplitDemoController.cs index f625b202..2f539f49 100644 --- a/Blog.Core.Api/Controllers/SplitDemoController.cs +++ b/Blog.Core.Api/Controllers/SplitDemoController.cs @@ -5,91 +5,174 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Linq.Expressions; +using Blog.Core.Controllers; +using SqlSugar; -namespace Blog.Core.Api.Controllers +namespace Blog.Core.Api.Controllers; + +/// <summary> +/// 分表demo +/// </summary> +[Route("api/[controller]/[action]")] +[ApiController] +[Authorize(Permissions.Name)] +public class SplitDemoController : BaseApiController { + readonly ISplitDemoServices splitDemoServices; + readonly IUnitOfWorkManage unitOfWorkManage; + private readonly ISqlSugarClient _db; + + public SplitDemoController(ISplitDemoServices _splitDemoServices, IUnitOfWorkManage _unitOfWorkManage, ISqlSugarClient db) + { + splitDemoServices = _splitDemoServices; + unitOfWorkManage = _unitOfWorkManage; + _db = db; + } + + /// <summary> + /// 分页获取数据 + /// </summary> + /// <param name="beginTime"></param> + /// <param name="endTime"></param> + /// <param name="page"></param> + /// <param name="key"></param> + /// <param name="pageSize"></param> + /// <returns></returns> + [HttpGet] + [AllowAnonymous] + public async Task<MessageModel<PageModel<SplitDemo>>> Get(DateTime beginTime, DateTime endTime, int page = 1, string key = "", + int pageSize = 10) + { + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + + Expression<Func<SplitDemo, bool>> whereExpression = a => (a.Name != null && a.Name.Contains(key)); + var data = await splitDemoServices.QueryPageSplit(whereExpression, beginTime, endTime, page, pageSize, " Id desc "); + return MessageModel<PageModel<SplitDemo>>.Message(data.dataCount >= 0, "获取成功", data); + } + + [HttpGet] + [AllowAnonymous] + public async Task<MessageModel<List<SplitDemo>>> GetSpilt() + { + var data = await _db.Queryable<SplitDemo>().AS("SplitDemo_20241231").ToListAsync(); + return Success(data); + } + /// <summary> - /// 分表demo + /// 根据ID获取信息 /// </summary> - [Route("api/[controller]/[action]")] - [ApiController] - [Authorize(Permissions.Name)] - public class SplitDemoController : ControllerBase + /// <param name="id"></param> + /// <returns></returns> + [HttpGet] + [AllowAnonymous] + public async Task<MessageModel<SplitDemo>> GetById(long id) { - readonly ISplitDemoServices splitDemoServices; - readonly IUnitOfWorkManage unitOfWorkManage; - public SplitDemoController(ISplitDemoServices _splitDemoServices, IUnitOfWorkManage _unitOfWorkManage) + var data = new MessageModel<string>(); + var model = await splitDemoServices.QueryByIdSplit(id); + if (model != null) + { + return MessageModel<SplitDemo>.Success("获取成功", model); + } + else { - splitDemoServices = _splitDemoServices; - unitOfWorkManage = _unitOfWorkManage; + return MessageModel<SplitDemo>.Fail("获取失败"); } + } - /// <summary> - /// 分页获取数据 - /// </summary> - /// <param name="beginTime"></param> - /// <param name="endTime"></param> - /// <param name="page"></param> - /// <param name="key"></param> - /// <param name="pageSize"></param> - /// <returns></returns> - [HttpGet] - [AllowAnonymous] - public async Task<MessageModel<PageModel<SplitDemo>>> Get(DateTime beginTime, DateTime endTime, int page = 1, string key = "", int pageSize = 10) + [HttpPost] + [AllowAnonymous] + public async Task<MessageModel> GenTestData() + { + //帮我生成一个月数据 + for (int i = 0; i < 30; i++) { - if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + await splitDemoServices.AddSplit(new SplitDemo() { - key = ""; - } - Expression<Func<SplitDemo, bool>> whereExpression = a => (a.Name != null && a.Name.Contains(key)); - var data = await splitDemoServices.QueryPageSplit(whereExpression, beginTime, endTime, page, pageSize, " Id desc "); - return MessageModel<PageModel<SplitDemo>>.Message(data.dataCount >= 0, "获取成功", data); + Name = "测试数据" + i, + CreateTime = DateTime.Now.AddDays(-i) + }); } - /// <summary> - /// 根据ID获取信息 - /// </summary> - /// <param name="id"></param> - /// <returns></returns> - [HttpGet] - [AllowAnonymous] - public async Task<MessageModel<SplitDemo>> GetById(long id) + return Success(); + } + + [HttpPost] + [AllowAnonymous] + public async Task<MessageModel> InitTable() + { + _db.MappingTables.Add("SplitDemo","SplitDemo_20241231"); + _db.CodeFirst.InitTables<SplitDemo>(); + await Task.Delay(1); + return Success(); + } + + /// <summary> + /// 添加一条测试数据 + /// </summary> + /// <param name="splitDemo"></param> + /// <returns></returns> + [HttpPost] + [AllowAnonymous] + public async Task<MessageModel<string>> Post([FromBody] SplitDemo splitDemo) + { + var data = new MessageModel<string>(); + //unitOfWorkManage.BeginTran(); + var id = (await splitDemoServices.AddSplit(splitDemo)); + data.success = (id == null ? false : true); + try { - var data = new MessageModel<string>(); - var model = await splitDemoServices.QueryByIdSplit(id); - if (model != null) + if (data.success) { - return MessageModel<SplitDemo>.Success("获取成功", model); + data.response = id.FirstOrDefault().ToString(); + data.msg = "添加成功"; } else { - return MessageModel<SplitDemo>.Fail("获取失败"); + data.msg = "添加失败"; } } + catch (Exception) + { + throw; + } + finally + { + //if (data.success) + // unitOfWorkManage.CommitTran(); + //else + // unitOfWorkManage.RollbackTran(); + } + + return data; + } - /// <summary> - /// 添加一条测试数据 - /// </summary> - /// <param name="splitDemo"></param> - /// <returns></returns> - [HttpPost] - [AllowAnonymous] - public async Task<MessageModel<string>> Post([FromBody] SplitDemo splitDemo) + /// <summary> + /// 修改一条测试数据 + /// </summary> + /// <param name="splitDemo"></param> + /// <returns></returns> + [HttpPut] + [AllowAnonymous] + public async Task<MessageModel<string>> Put([FromBody] SplitDemo splitDemo) + { + var data = new MessageModel<string>(); + if (splitDemo != null && splitDemo.Id > 0) { - var data = new MessageModel<string>(); - //unitOfWorkManage.BeginTran(); - var id = (await splitDemoServices.AddSplit(splitDemo)); - data.success = (id == null ? false : true); + unitOfWorkManage.BeginTran(); + data.success = await splitDemoServices.UpdateSplit(splitDemo, splitDemo.CreateTime); try { if (data.success) { - data.response = id.FirstOrDefault().ToString(); - data.msg = "添加成功"; + data.msg = "修改成功"; + data.response = splitDemo?.Id.ObjToString(); } else { - data.msg = "添加失败"; + data.msg = "修改失败"; } } catch (Exception) @@ -98,102 +181,61 @@ public async Task<MessageModel<string>> Post([FromBody] SplitDemo splitDemo) } finally { - //if (data.success) - // unitOfWorkManage.CommitTran(); - //else - // unitOfWorkManage.RollbackTran(); + if (data.success) + unitOfWorkManage.CommitTran(); + else + unitOfWorkManage.RollbackTran(); } - return data; } - /// <summary> - /// 修改一条测试数据 - /// </summary> - /// <param name="splitDemo"></param> - /// <returns></returns> - [HttpPut] - [AllowAnonymous] - public async Task<MessageModel<string>> Put([FromBody] SplitDemo splitDemo) + return data; + } + + /// <summary> + /// 根据id删除数据 + /// </summary> + /// <param name="id"></param> + /// <returns></returns> + [HttpDelete] + [AllowAnonymous] + public async Task<MessageModel<string>> Delete(long id) + { + var data = new MessageModel<string>(); + + var model = await splitDemoServices.QueryByIdSplit(id); + if (model != null) { - var data = new MessageModel<string>(); - if (splitDemo != null && splitDemo.Id > 0) + unitOfWorkManage.BeginTran(); + data.success = await splitDemoServices.DeleteSplit(model, model.CreateTime); + try { - unitOfWorkManage.BeginTran(); - data.success = await splitDemoServices.UpdateSplit(splitDemo, splitDemo.CreateTime); - try - { - if (data.success) - { - data.msg = "修改成功"; - data.response = splitDemo?.Id.ObjToString(); - } - else - { - data.msg = "修改失败"; - } - } - catch (Exception) + data.response = id.ObjToString(); + if (data.success) { - throw; + data.msg = "删除成功"; } - finally + else { - if (data.success) - unitOfWorkManage.CommitTran(); - else - unitOfWorkManage.RollbackTran(); + data.msg = "删除失败"; } } - return data; - } - - /// <summary> - /// 根据id删除数据 - /// </summary> - /// <param name="id"></param> - /// <returns></returns> - [HttpDelete] - [AllowAnonymous] - public async Task<MessageModel<string>> Delete(long id) - { - var data = new MessageModel<string>(); - - var model = await splitDemoServices.QueryByIdSplit(id); - if (model != null) + catch (Exception) { - unitOfWorkManage.BeginTran(); - data.success = await splitDemoServices.DeleteSplit(model,model.CreateTime); - try - { - data.response = id.ObjToString(); - if (data.success) - { - data.msg = "删除成功"; - } - else - { - data.msg = "删除失败"; - } - - } - catch (Exception) - { - throw; - } - finally - { - if (data.success) - unitOfWorkManage.CommitTran(); - else - unitOfWorkManage.RollbackTran(); - } + throw; } - else + finally { - data.msg = "不存在"; + if (data.success) + unitOfWorkManage.CommitTran(); + else + unitOfWorkManage.RollbackTran(); } - return data; - } + else + { + data.msg = "不存在"; + } + + return data; } -} +} \ No newline at end of file