diff --git a/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileBuilder.cs b/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileBuilder.cs index cbea309a..be1bbf0e 100644 --- a/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileBuilder.cs +++ b/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileBuilder.cs @@ -1,15 +1,13 @@ using System; using System.Collections; -using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Security.Cryptography; using System.Text; -namespace FreeSql +namespace FreeSql.Extensions.DynamicEntity { /// /// 动态创建实体类型 @@ -57,7 +55,7 @@ namespace FreeSql /// /// 父类类型 /// - public DynamicCompileBuilder SuperClass(Type superClass) + public DynamicCompileBuilder Extend(Type superClass) { _superClass = superClass; return this; diff --git a/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs b/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs index 5e839e06..dec44591 100644 --- a/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs +++ b/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Linq; using System.Linq.Expressions; +using System.Security.Cryptography; +using System.Text; namespace FreeSql.Extensions.DynamicEntity { @@ -22,8 +25,8 @@ namespace FreeSql.Extensions.DynamicEntity /// /// 委托缓存 /// - private static readonly ConcurrentDictionary - DelegateCache = new ConcurrentDictionary(); + private static readonly ConcurrentDictionary DelegateCache = + new ConcurrentDictionary(); /// /// 设置动态对象的属性值 @@ -39,7 +42,9 @@ namespace FreeSql.Extensions.DynamicEntity if (istance == null) return null; //根据key确定缓存 - var cacheKey = $"{type.GetHashCode()}{porpertys.GetHashCode()}"; + var cacheKeyStr = string.Join("-", porpertys.Keys.OrderBy(s => s)); + var dicKey = Md5Encryption(cacheKeyStr); + var cacheKey = $"{type.GetHashCode()}-{dicKey}"; var dynamicDelegate = DelegateCache.GetOrAdd(cacheKey, key => { //表达式目录树构建委托 @@ -70,5 +75,18 @@ namespace FreeSql.Extensions.DynamicEntity var dynamicInvoke = dynamicDelegate.DynamicInvoke(istance, porpertys); return dynamicInvoke; } + + private static string Md5Encryption(string inputStr) + { + var result = string.Empty; + //32位大写 + using (var md5 = MD5.Create()) + { + var resultBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(inputStr)); + result = BitConverter.ToString(resultBytes); + } + + return result; + } } } \ No newline at end of file diff --git a/Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.xml b/Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.xml index b5032f3a..a2ae1e55 100644 --- a/Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.xml +++ b/Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.xml @@ -4,12 +4,12 @@ FreeSql.Extensions.DynamicEntity - + 动态创建实体类型 - + 配置Class @@ -17,7 +17,7 @@ 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - + 配置属性 @@ -26,27 +26,27 @@ 属性标记的特性-支持多个 - + 配置父类 父类类型 - + Emit动态创建出Class - Type - + 首字母小写 - + 首字母大写