瀏覽代碼

非共享数据库实体配置,不生成TenantId字段

xiaoxue 4 年之前
父節點
當前提交
f483ac277f

+ 1 - 8
Admin.Core.Common/BaseModel/EntityFull.cs

@@ -8,15 +8,8 @@ namespace Admin.Core.Common.BaseModel
     /// <summary>
     /// 实体完整类
     /// </summary>
-    public class EntityFull<TKey> : Entity<TKey>, ITenant, IEntityVersion, IEntitySoftDelete, IEntityAdd<TKey>, IEntityUpdate<TKey> where TKey : struct
+    public class EntityFull<TKey> : Entity<TKey>, IEntityVersion, IEntitySoftDelete, IEntityAdd<TKey>, IEntityUpdate<TKey> where TKey : struct
     {
-        /// <summary>
-        /// 租户Id
-        /// </summary>
-        [Description("租户Id")]
-        [Column(Position = -10, CanUpdate = false)]
-        public virtual long? TenantId { get; set; }
-
         /// <summary>
         /// 版本
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/ApiEntity.cs

@@ -9,8 +9,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_api")]
     [Index("idx_{tablename}_01", nameof(Path), true)]
-    public class ApiEntity : EntityFull
+    public class ApiEntity : EntityFull, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 所属模块
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/DictionaryEntity.cs

@@ -8,8 +8,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_dictionary")]
     [Index("idx_{tablename}_01", nameof(ParentId)+","+nameof(Name), true)]
-    public class DictionaryEntity: EntityFull
+    public class DictionaryEntity: EntityFull, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 字典父级
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/DocumentEntity.cs

@@ -8,8 +8,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_document")]
     [Index("idx_{tablename}_01", nameof(ParentId) + "," + nameof(Label), true)]
-    public class DocumentEntity : EntityFull
+    public class DocumentEntity : EntityFull, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 父级节点
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/DocumentImageEntity.cs

@@ -8,8 +8,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_document_image")]
     [Index("idx_{tablename}_01", nameof(DocumentId) + "," + nameof(Url), true)]
-    public class DocumentImageEntity: EntityAdd
+    public class DocumentImageEntity: EntityAdd, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 用户Id
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/PermissionEntity.cs

@@ -8,8 +8,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_permission")]
     [Index("idx_{tablename}_01", nameof(ParentId) + "," + nameof(Label), true)]
-    public class PermissionEntity : EntityFull
+    public class PermissionEntity : EntityFull, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 父级节点
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/RoleEntity.cs

@@ -10,8 +10,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_role")]
     [Index("idx_{tablename}_01", nameof(Name), true)]
-    public class RoleEntity: EntityFull
+    public class RoleEntity: EntityFull, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 名称
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/RolePermissionEntity.cs

@@ -8,8 +8,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_role_permission")]
     [Index("idx_{tablename}_01", nameof(RoleId) + "," + nameof(PermissionId), true)]
-    public class RolePermissionEntity: EntityAdd
+    public class RolePermissionEntity: EntityAdd, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 角色Id
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/TenantEntity.cs

@@ -11,8 +11,14 @@ namespace Admin.Core.Model.Admin
 	[Table(Name = "ad_tenant")]
     [Index("idx_{tablename}_01", nameof(Name), true)]
     [Index("idx_{tablename}_02", nameof(Code), true)]
-    public class TenantEntity : EntityFull
+    public class TenantEntity : EntityFull, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 编码
         /// </summary>

+ 1 - 1
Admin.Core.Model/Admin/UserEntity.cs

@@ -16,7 +16,7 @@ namespace Admin.Core.Model.Admin
         /// 租户Id
         /// </summary>
         [Column(Position = -10, CanUpdate = true)]
-        public override long? TenantId { get; set; }
+        public long? TenantId { get; set; }
 
         /// <summary>
         /// 账号

+ 7 - 1
Admin.Core.Model/Admin/UserRoleEntity.cs

@@ -8,8 +8,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_user_role")]
     [Index("idx_{tablename}_01", nameof(UserId) + "," + nameof(RoleId), true)]
-    public class UserRoleEntity: EntityAdd
+    public class UserRoleEntity: EntityAdd, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 用户Id
         /// </summary>

+ 7 - 1
Admin.Core.Model/Admin/ViewEntity.cs

@@ -9,8 +9,14 @@ namespace Admin.Core.Model.Admin
     /// </summary>
 	[Table(Name = "ad_view")]
     [Index("idx_{tablename}_01", nameof(ParentId) + "," + nameof(Label), true)]
-    public class ViewEntity : EntityFull
+    public class ViewEntity : EntityFull, ITenant
     {
+        /// <summary>
+        /// 租户Id
+        /// </summary>
+        [Column(Position = -10, CanUpdate = false)]
+        public long? TenantId { get; set; }
+
         /// <summary>
         /// 所属节点
         /// </summary>

+ 0 - 5
Admin.Core/Admin.Core.Common.xml

@@ -154,11 +154,6 @@
             实体完整类
             </summary>
         </member>
-        <member name="P:Admin.Core.Common.BaseModel.EntityFull`1.TenantId">
-            <summary>
-            租户Id
-            </summary>
-        </member>
         <member name="P:Admin.Core.Common.BaseModel.EntityFull`1.Version">
             <summary>
             版本

+ 50 - 0
Admin.Core/Admin.Core.Model.xml

@@ -9,6 +9,11 @@
             接口管理
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.ApiEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.ApiEntity.ParentId">
             <summary>
             所属模块
@@ -54,6 +59,11 @@
             数据字典
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.DictionaryEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.DictionaryEntity.ParentId">
             <summary>
             字典父级
@@ -94,6 +104,11 @@
             文档
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.DocumentEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.DocumentEntity.ParentId">
             <summary>
             父级节点
@@ -149,6 +164,11 @@
             文档图片
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.DocumentImageEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.DocumentImageEntity.DocumentId">
             <summary>
             用户Id
@@ -269,6 +289,11 @@
             权限
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.PermissionEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.PermissionEntity.ParentId">
             <summary>
             父级节点
@@ -379,6 +404,11 @@
             角色
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.RoleEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.RoleEntity.Name">
             <summary>
             名称
@@ -404,6 +434,11 @@
             角色权限
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.RolePermissionEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.RolePermissionEntity.RoleId">
             <summary>
             角色Id
@@ -429,6 +464,11 @@
             租户
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.TenantEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.TenantEntity.Code">
             <summary>
             编码
@@ -509,6 +549,11 @@
             用户角色
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.UserRoleEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.UserRoleEntity.UserId">
             <summary>
             用户Id
@@ -524,6 +569,11 @@
             视图管理
             </summary>
         </member>
+        <member name="P:Admin.Core.Model.Admin.ViewEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
         <member name="P:Admin.Core.Model.Admin.ViewEntity.ParentId">
             <summary>
             所属节点

+ 7 - 1
Admin.Core/Admin.Core.xml

@@ -735,7 +735,13 @@
             <param name="dbConfig"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.Core.Db.DbHelper.SyncStructure(IFreeSql,System.String,Admin.Core.Common.Configs.DbConfig)">
+        <member name="M:Admin.Core.Db.DbHelper.GetEntityTypes">
+            <summary>
+            获得指定程序集表实体
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.Core.Db.DbHelper.SyncStructure(IFreeSql,System.String,Admin.Core.Common.Configs.DbConfig,Admin.Core.Common.Configs.AppConfig)">
             <summary>
             同步结构
             </summary>

+ 2 - 1
Admin.Core/Db/DBServiceCollectionExtensions.cs

@@ -51,7 +51,8 @@ namespace Admin.Core.Db
             //同步结构
             if (dbConfig.SyncStructure)
             {
-                DbHelper.SyncStructure(fsql, dbConfig: dbConfig);
+                var appConfig = new ConfigHelper().Get<AppConfig>("appconfig", env.EnvironmentName);
+                DbHelper.SyncStructure(fsql, dbConfig: dbConfig, appConfig: appConfig);
             }
 
             //同步数据

+ 58 - 16
Admin.Core/Db/DbHelper.cs

@@ -10,6 +10,9 @@ using FreeSql.DataAnnotations;
 using Admin.Core.Common.Configs;
 using Admin.Core.Common.Helpers;
 using Admin.Core.Model.Admin;
+using System.Collections.Generic;
+using System.Reflection;
+using Admin.Core.Common.BaseModel;
 
 namespace Admin.Core.Db
 {
@@ -43,10 +46,43 @@ namespace Admin.Core.Db
             }
         }
 
+        /// <summary>
+        /// 获得指定程序集表实体
+        /// </summary>
+        /// <returns></returns>
+        public static Type[] GetEntityTypes()
+        {
+            List<string> assemblyNames = new List<string>()
+            {
+                "Admin.Core.Model"
+            };
+
+            List<Type> entityTypes = new List<Type>();
+
+            foreach (var assemblyName in assemblyNames)
+            {
+                foreach (Type type in Assembly.Load(assemblyName).GetExportedTypes())
+                {
+                    foreach (Attribute attribute in type.GetCustomAttributes())
+                    {
+                        if (attribute is TableAttribute tableAttribute)
+                        {
+                            if (tableAttribute.DisableSyncStructure == false)
+                            {
+                                entityTypes.Add(type);
+                            }
+                        }
+                    }
+                }
+            }
+           
+            return entityTypes.ToArray();
+        }
+
         /// <summary>
         /// 同步结构
         /// </summary>
-        public static void SyncStructure(IFreeSql db, string msg = null, DbConfig dbConfig = null)
+        public static void SyncStructure(IFreeSql db, string msg = null, DbConfig dbConfig = null, AppConfig appConfig = null)
         {
             //打印结构比对脚本
             //var dDL = db.CodeFirst.GetComparisonDDLStatements<PermissionEntity>();
@@ -68,22 +104,28 @@ namespace Admin.Core.Db
             {
                 db.CodeFirst.IsSyncStructureToUpper = true;
             }
-            db.CodeFirst.SyncStructure(new Type[]
+
+            //获得指定程序集表实体
+            var entityTypes = GetEntityTypes();
+
+            //非共享数据库实体配置,不生成租户Id
+            if(appConfig.TenantType != TenantType.Share)
             {
-                typeof(DictionaryEntity),
-                typeof(ApiEntity),
-                typeof(ViewEntity),
-                typeof(PermissionEntity),
-                typeof(UserEntity),
-                typeof(RoleEntity),
-                typeof(UserRoleEntity),
-                typeof(RolePermissionEntity),
-                typeof(OprationLogEntity),
-                typeof(LoginLogEntity),
-                typeof(DocumentEntity),
-                typeof(DocumentImageEntity),
-                typeof(TenantEntity)
-            });
+                var iTenant = nameof(ITenant);
+                var tenantId = nameof(ITenant.TenantId);
+                foreach (var entityType in entityTypes)
+                {
+                    if(entityType.GetInterfaces().Any(a=> a.Name == iTenant))
+                    {
+                        db.CodeFirst.Entity(entityType, a =>
+                        {
+                            a.Ignore(tenantId);
+                        });
+                    }
+                }
+            }
+
+            db.CodeFirst.SyncStructure(entityTypes);
             Console.WriteLine($" {(msg.NotNull() ? msg : $"sync {dbType} structure")} succeed");
         }