mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 优化DynamicEntity设置动态对象的属性值逻辑
This commit is contained in:
parent
fa20468dc8
commit
18cd0e7a28
@ -1,15 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Reflection.Emit;
|
using System.Reflection.Emit;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace FreeSql
|
namespace FreeSql.Extensions.DynamicEntity
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 动态创建实体类型
|
/// 动态创建实体类型
|
||||||
@ -57,7 +55,7 @@ namespace FreeSql
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="superClass">父类类型</param>
|
/// <param name="superClass">父类类型</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public DynamicCompileBuilder SuperClass(Type superClass)
|
public DynamicCompileBuilder Extend(Type superClass)
|
||||||
{
|
{
|
||||||
_superClass = superClass;
|
_superClass = superClass;
|
||||||
return this;
|
return this;
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace FreeSql.Extensions.DynamicEntity
|
namespace FreeSql.Extensions.DynamicEntity
|
||||||
{
|
{
|
||||||
@ -22,8 +25,8 @@ namespace FreeSql.Extensions.DynamicEntity
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 委托缓存
|
/// 委托缓存
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static readonly ConcurrentDictionary<string, Delegate>
|
private static readonly ConcurrentDictionary<string, Delegate> DelegateCache =
|
||||||
DelegateCache = new ConcurrentDictionary<string, Delegate>();
|
new ConcurrentDictionary<string, Delegate>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置动态对象的属性值
|
/// 设置动态对象的属性值
|
||||||
@ -39,7 +42,9 @@ namespace FreeSql.Extensions.DynamicEntity
|
|||||||
if (istance == null)
|
if (istance == null)
|
||||||
return null;
|
return null;
|
||||||
//根据key确定缓存
|
//根据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 =>
|
var dynamicDelegate = DelegateCache.GetOrAdd(cacheKey, key =>
|
||||||
{
|
{
|
||||||
//表达式目录树构建委托
|
//表达式目录树构建委托
|
||||||
@ -70,5 +75,18 @@ namespace FreeSql.Extensions.DynamicEntity
|
|||||||
var dynamicInvoke = dynamicDelegate.DynamicInvoke(istance, porpertys);
|
var dynamicInvoke = dynamicDelegate.DynamicInvoke(istance, porpertys);
|
||||||
return dynamicInvoke;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,12 +4,12 @@
|
|||||||
<name>FreeSql.Extensions.DynamicEntity</name>
|
<name>FreeSql.Extensions.DynamicEntity</name>
|
||||||
</assembly>
|
</assembly>
|
||||||
<members>
|
<members>
|
||||||
<member name="T:FreeSql.DynamicCompileBuilder">
|
<member name="T:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder">
|
||||||
<summary>
|
<summary>
|
||||||
动态创建实体类型
|
动态创建实体类型
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.DynamicCompileBuilder.Class(System.String,System.Attribute[])">
|
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Class(System.String,System.Attribute[])">
|
||||||
<summary>
|
<summary>
|
||||||
配置Class
|
配置Class
|
||||||
</summary>
|
</summary>
|
||||||
@ -17,7 +17,7 @@
|
|||||||
<param name="attributes">类标记的特性[Table(Name = "xxx")] [Index(xxxx)]</param>
|
<param name="attributes">类标记的特性[Table(Name = "xxx")] [Index(xxxx)]</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.DynamicCompileBuilder.Property(System.String,System.Type,System.Attribute[])">
|
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Attribute[])">
|
||||||
<summary>
|
<summary>
|
||||||
配置属性
|
配置属性
|
||||||
</summary>
|
</summary>
|
||||||
@ -26,27 +26,27 @@
|
|||||||
<param name="attributes">属性标记的特性-支持多个</param>
|
<param name="attributes">属性标记的特性-支持多个</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.DynamicCompileBuilder.SuperClass(System.Type)">
|
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Extend(System.Type)">
|
||||||
<summary>
|
<summary>
|
||||||
配置父类
|
配置父类
|
||||||
</summary>
|
</summary>
|
||||||
<param name="superClass">父类类型</param>
|
<param name="superClass">父类类型</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.DynamicCompileBuilder.Build">
|
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Build">
|
||||||
<summary>
|
<summary>
|
||||||
Emit动态创建出Class - Type
|
Emit动态创建出Class - Type
|
||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.DynamicCompileBuilder.FirstCharToLower(System.String)">
|
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToLower(System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
首字母小写
|
首字母小写
|
||||||
</summary>
|
</summary>
|
||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.DynamicCompileBuilder.FirstCharToUpper(System.String)">
|
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToUpper(System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
首字母大写
|
首字母大写
|
||||||
</summary>
|
</summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user