0
0
Эх сурвалжийг харах

修复非共享数据库手工同步结构关闭后,执行Curd操作TenantId的问题。

xiaoxue 4 жил өмнө
parent
commit
522825e72f

+ 12 - 0
Admin.Core/Admin.Core.xml

@@ -741,11 +741,23 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="M:Admin.Core.Db.DbHelper.ConfigEntity(IFreeSql,Admin.Core.Common.Configs.AppConfig)">
+            <summary>
+            配置实体
+            </summary>
+        </member>
         <member name="M:Admin.Core.Db.DbHelper.SyncStructure(IFreeSql,System.String,Admin.Core.Common.Configs.DbConfig,Admin.Core.Common.Configs.AppConfig)">
             <summary>
             同步结构
             </summary>
         </member>
+        <member name="M:Admin.Core.Db.DbHelper.CheckIdentity``1">
+            <summary>
+            检查实体属性是否为自增长
+            </summary>
+            <typeparam name="T"></typeparam>
+            <returns></returns>
+        </member>
         <member name="M:Admin.Core.Db.DbHelper.InitDtDataAsync``1(IFreeSql,``0[],System.Data.Common.DbTransaction,Admin.Core.Common.Configs.DbConfig)">
             <summary>
             初始化数据表数据

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

@@ -30,7 +30,7 @@ namespace Admin.Core.Db
             #region FreeSql
             var freeSqlBuilder = new FreeSqlBuilder()
                     .UseConnectionString(dbConfig.Type, dbConfig.ConnectionString)
-                    .UseAutoSyncStructure(dbConfig.SyncStructure)
+                    .UseAutoSyncStructure(false)
                     .UseLazyLoading(false)
                     .UseNoneCommandParameter(true);
 
@@ -47,11 +47,14 @@ namespace Admin.Core.Db
 
             var fsql = freeSqlBuilder.Build();
 
+            //配置实体
+            var appConfig = new ConfigHelper().Get<AppConfig>("appconfig", env.EnvironmentName);
+            DbHelper.ConfigEntity(fsql, appConfig);
+
             #region 初始化数据库
             //同步结构
             if (dbConfig.SyncStructure)
             {
-                var appConfig = new ConfigHelper().Get<AppConfig>("appconfig", env.EnvironmentName);
                 DbHelper.SyncStructure(fsql, dbConfig: dbConfig, appConfig: appConfig);
             }
 

+ 27 - 17
Admin.Core/Db/DbHelper.cs

@@ -79,6 +79,33 @@ namespace Admin.Core.Db
             return entityTypes.ToArray();
         }
 
+        /// <summary>
+        /// 配置实体
+        /// </summary>
+        public static void ConfigEntity(IFreeSql db, AppConfig appConfig = null)
+        {
+            //非共享数据库实体配置,不生成和操作租户Id
+            if (appConfig.TenantType != TenantType.Share)
+            {
+                var iTenant = nameof(ITenant);
+                var tenantId = nameof(ITenant.TenantId);
+
+                //获得指定程序集表实体
+                var entityTypes = GetEntityTypes();
+
+                foreach (var entityType in entityTypes)
+                {
+                    if (entityType.GetInterfaces().Any(a => a.Name == iTenant))
+                    {
+                        db.CodeFirst.Entity(entityType, a =>
+                        {
+                            a.Ignore(tenantId);
+                        });
+                    }
+                }
+            }
+        }
+
         /// <summary>
         /// 同步结构
         /// </summary>
@@ -108,23 +135,6 @@ namespace Admin.Core.Db
             //获得指定程序集表实体
             var entityTypes = GetEntityTypes();
 
-            //非共享数据库实体配置,不生成租户Id
-            if(appConfig.TenantType != TenantType.Share)
-            {
-                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");
         }

+ 5 - 1
Admin.Core/Db/TenantDBServiceCollectionExtensions.cs

@@ -60,8 +60,12 @@ namespace Admin.Core.Db
 
                 var fsql = freeSqlBuilder.Build();
                 fsql.GlobalFilter.Apply<IEntitySoftDelete>("SoftDelete", a => a.IsDeleted == false);
+                
+                //配置实体
+                DbHelper.ConfigEntity(fsql, appConfig);
+
                 //共享数据库
-                if(appConfig.TenantType == TenantType.Share)
+                if (appConfig.TenantType == TenantType.Share)
                 {
                     fsql.GlobalFilter.ApplyIf<ITenant>("Tenant", () => user.TenantId > 0, a => a.TenantId == user.TenantId);
                 }