From e0250faa09f3547583e09eb1fd1cf908ab9c6116 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期二, 05 八月 2025 11:24:26 +0800
Subject: [PATCH] fix:bug

---
 FlexJobApi.Core/Utils/DbUtils/DbUtils.cs |   66 +++++++++++++++------------------
 1 files changed, 30 insertions(+), 36 deletions(-)

diff --git a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
index 1547067..5531843 100644
--- a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
+++ b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
@@ -18,38 +18,27 @@
     public static class DbUtils
     {
         /// <summary>
-        /// 鐢熸垚瀹炰綋娉ㄩ噴
+        /// 鐢熸垚瀹炰綋
         /// </summary>
         /// <param name="modelBuilder"></param>
         /// <param name="dbContextLocator"></param>
         /// <returns></returns>
-        public static async Task BuildEntityComment(ModelBuilder modelBuilder, Type dbContextLocator = null)
+        public static async Task BuildEntity(ModelBuilder modelBuilder, Type dbContextLocator = null)
         {
             var xmlDoc = await XmlDocUtils.GetXmlDocAsync();
-            var entityTypes = App.Assemblies
-                .Where(it => it.FullName.Contains("FlexJob"))
-                .SelectMany(it => it.GetTypes())
-                .Where(it =>
-                    it.IsClass
-                    && !it.IsAbstract
-                    && typeof(IPrivateEntity).IsAssignableFrom(it)
-                    && (dbContextLocator == null
-                    ? it.BaseType == typeof(CommonEntity)
-                    : it.BaseType.GenericTypeArguments.Any(it => it == dbContextLocator)))
-                .ToList();
-            foreach (var entityType in entityTypes)
+            foreach (var entityType in modelBuilder.Model.GetEntityTypes())
             {
                 Console.WriteLine($"姝e湪鐢熸垚琛細{entityType.Name}");
                 // 鑾峰彇瀹炰綋绫荤殑XML娉ㄩ噴锛屽苟璁剧疆涓鸿〃娉ㄩ噴
-                var entityBuilder = modelBuilder.Entity(entityType);
-                string typeComment = (await entityType.GetXmlDocMemberAsync(xmlDoc))?.Summary;
+                var entityBuilder = modelBuilder.Entity(entityType.ClrType);
+                string typeComment = (await entityType.ClrType.GetXmlDocMemberAsync(xmlDoc))?.Summary;
                 if (!string.IsNullOrEmpty(typeComment))
                 {
                     Console.WriteLine($"姝e湪鐢熸垚琛ㄦ敞閲婏細{entityType.Name}-{typeComment}");
                     entityBuilder.ToTable(it => it.HasComment(typeComment));
                 }
                 // 鑾峰彇瀹炰綋灞炴�х殑XML娉ㄩ噴锛屽苟璁剧疆涓哄垪娉ㄩ噴
-                var properties = entityType.GetProperties()
+                var properties = entityType.ClrType.GetProperties()
                     .Where(p =>
                         p.CanRead
                         && p.CanWrite
@@ -63,6 +52,19 @@
                         Console.WriteLine($"姝e湪鐢熸垚灞炴�ф敞閲婏細{property.Name}-{propComment}");
                         entityBuilder.Property(property.Name).HasComment(propComment);
                     }
+                }
+
+                if (typeof(CommonEntity).IsAssignableFrom(entityType.ClrType))
+                {
+                    // 鏋勫缓绛涢�夋潯浠讹細IsDeleted == false
+                    var parameter = Expression.Parameter(entityType.ClrType, "e");
+                    var property = Expression.Property(parameter, "IsDeleted");
+                    var constant = Expression.Constant(false);
+                    var equal = Expression.Equal(property, constant);
+                    var lambda = Expression.Lambda(equal, parameter);
+
+                    // 娣诲姞鍏ㄥ眬绛涢�夊櫒
+                    modelBuilder.Entity(entityType.ClrType).HasQueryFilter(lambda);
                 }
             }
         }
@@ -118,26 +120,33 @@
                     {
                         prop.CurrentValue = logier?.UserInfoId;
                     }
+
+                    // 璧嬪�艰窡韪狪d
+                    prop = entity.Property(nameof(CommonEntity.TraceId));
+                    if (prop != null)
+                    {
+                        prop.CurrentValue = App.GetTraceId();
+                    }
                 }
                 else
                 {
                     // 璧嬪�间慨鏀规棩鏈�
                     var prop = entity.Property(nameof(CommonEntity.UpdatedTime));
-                    if (prop != null && prop.CurrentValue?.ToDateTime() == null)
+                    if (prop != null)
                     {
                         prop.CurrentValue = DateTimeOffset.Now;
                     }
 
                     // 璧嬪�肩敤鎴蜂俊鎭疘d
                     prop = entity.Property(nameof(CommonEntity.UpdatedUserInfoId));
-                    if (prop != null && prop.CurrentValue == null)
+                    if (prop != null)
                     {
                         prop.CurrentValue = logier?.UserInfoId;
                     }
 
                     // 璧嬪�艰窡韪狪d
                     prop = entity.Property(nameof(CommonEntity.TraceId));
-                    if (prop != null && prop.CurrentValue == null)
+                    if (prop != null)
                     {
                         prop.CurrentValue = App.GetTraceId();
                     }
@@ -148,7 +157,7 @@
                         entity.State = EntityState.Modified;
 
                         prop = entity.Property(nameof(CommonEntity.IsDeleted));
-                        if (prop != null && prop.CurrentValue == null)
+                        if (prop != null)
                         {
                             prop.CurrentValue = true;
                         }
@@ -190,21 +199,6 @@
                 .ToDictionary(p => p.Metadata.Name, p => getOldValues ? p.OriginalValue : p.CurrentValue);
 
             return JsonConvert.SerializeObject(properties);
-        }
-
-        public static void OnCreating(ModelBuilder modelBuilder, EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)
-        {
-            var metadata = entityBuilder.Metadata;
-
-            var parameter = Expression.Parameter(metadata.ClrType, "e");
-            var property = Expression.Property(parameter, nameof(CommonEntity.IsDeleted));
-            var falseConstant = Expression.Constant(false, typeof(bool));
-            var fakeDeleteQueryFilterExpression = Expression.Lambda(
-                Expression.Equal(property, falseConstant),
-                parameter
-            );
-            if (fakeDeleteQueryFilterExpression == null) return;
-            entityBuilder.HasQueryFilter(fakeDeleteQueryFilterExpression);
         }
     }
 }

--
Gitblit v1.9.1