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
-
+
首字母小写
-
+
首字母大写