Browse Source

AddOrUpdate支持忽略字段

懒得勤快 5 years ago
parent
commit
4eb8e4a225

+ 6 - 7
Masuit.Tools.Core/AspNetCore/DbSetExtensions.cs

@@ -74,18 +74,17 @@ namespace Masuit.Tools.Core.AspNetCore
             {
                 // 获取主键字段
                 var dataType = typeof(T);
-                var keyFields = dataType.GetProperties().Where(p => p.GetCustomAttribute<KeyAttribute>() != null).ToList();
-                if (!keyFields.Any())
+                var key_ignoreFields = dataType.GetProperties().Where(p => p.GetCustomAttribute<KeyAttribute>() != null || p.GetCustomAttribute<UpdateIgnoreAttribute>() != null).ToList();
+                if (!key_ignoreFields.Any())
                 {
                     string idName = dataType.Name + "Id";
-                    keyFields = dataType.GetProperties().Where(p => p.Name.Equals("Id", StringComparison.OrdinalIgnoreCase) || p.Name.Equals(idName, StringComparison.OrdinalIgnoreCase)).ToList();
+                    key_ignoreFields = dataType.GetProperties().Where(p => p.Name.Equals("Id", StringComparison.OrdinalIgnoreCase) || p.Name.Equals(idName, StringComparison.OrdinalIgnoreCase)).ToList();
                 }
-
                 // 更新所有非主键属性
                 foreach (var p in typeof(T).GetProperties().Where(p => p.GetSetMethod() != null && p.GetGetMethod() != null))
                 {
-                    // 忽略主键
-                    if (keyFields.Any(x => x.Name == p.Name))
+                    // 忽略主键和被忽略的字段
+                    if (key_ignoreFields.Any(x => x.Name == p.Name))
                     {
                         continue;
                     }
@@ -97,7 +96,7 @@ namespace Masuit.Tools.Core.AspNetCore
                     }
                 }
 
-                foreach (var idField in keyFields.Where(p => p.GetSetMethod() != null && p.GetGetMethod() != null))
+                foreach (var idField in key_ignoreFields.Where(p => p.GetSetMethod() != null && p.GetGetMethod() != null))
                 {
                     var existingValue = idField.GetValue(item);
                     if (idField.GetValue(entity) != existingValue)

+ 12 - 0
Masuit.Tools.Core/AspNetCore/UpdateIgnoreAttribute.cs

@@ -0,0 +1,12 @@
+using System;
+
+namespace Masuit.Tools.Core.AspNetCore
+{
+    /// <summary>
+    /// 更新时忽略的字段,检测到这个attribute时AddOrUpdate将忽略改字段
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
+    public sealed class UpdateIgnoreAttribute : Attribute
+    {
+    }
+}

+ 1 - 1
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <TargetFramework>netstandard2.1</TargetFramework>
-    <Version>2.2.8.5</Version>
+    <Version>2.2.8.6</Version>
     <Authors>懒得勤快</Authors>
     <Company>masuit.com</Company>
     <Description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,html处理,验证码、NoSql等常用封装。