From 18cd0e7a281cffbaee1102872a25403c7602f821 Mon Sep 17 00:00:00 2001
From: d4ilys <963922242@qq.com>
Date: Fri, 5 May 2023 11:44:12 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96DynamicEntity=E8=AE=BE?=
=?UTF-8?q?=E7=BD=AE=E5=8A=A8=E6=80=81=E5=AF=B9=E8=B1=A1=E7=9A=84=E5=B1=9E?=
=?UTF-8?q?=E6=80=A7=E5=80=BC=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../DynamicCompileBuilder.cs | 6 ++---
.../DynamicCompileHelper.cs | 24 ++++++++++++++++---
.../FreeSql.Extensions.DynamicEntity.xml | 14 +++++------
3 files changed, 30 insertions(+), 14 deletions(-)
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
-
+
首字母小写
-
+
首字母大写