diff --git a/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs b/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs
deleted file mode 100644
index dec445918..000000000
--- a/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-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
-{
- ///
- /// 动态创建对象帮助类
- ///
- public class DynamicCompileHelper
- {
- ///
- /// 动态构建Class - Type
- ///
- ///
- public static DynamicCompileBuilder DynamicBuilder()
- {
- return new DynamicCompileBuilder();
- }
-
- ///
- /// 委托缓存
- ///
- private static readonly ConcurrentDictionary DelegateCache =
- new ConcurrentDictionary();
-
- ///
- /// 设置动态对象的属性值
- ///
- ///
- ///
- ///
- public static object CreateObjectByType(Type type, Dictionary porpertys)
- {
- if (type == null)
- return null;
- object istance = Activator.CreateInstance(type);
- if (istance == null)
- return null;
- //根据key确定缓存
- 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 typeParam = Expression.Parameter(type);
- var dicParamType = typeof(Dictionary);
- var dicParam = Expression.Parameter(dicParamType);
- var exps = new List();
- var tempRef = Expression.Variable(typeof(object));
- foreach (var pinfo in porpertys)
- {
- var propertyInfo = type.GetProperty(pinfo.Key);
- if (propertyInfo == null)
- continue;
- var propertyName = Expression.Constant(pinfo.Key, typeof(string));
- exps.Add(Expression.Call(dicParam, dicParamType.GetMethod("TryGetValue"), propertyName, tempRef));
- exps.Add(Expression.Assign(Expression.MakeMemberAccess(typeParam, propertyInfo),
- Expression.Convert(tempRef, propertyInfo.PropertyType)));
- exps.Add(Expression.Assign(tempRef, Expression.Default(typeof(object))));
- }
-
- var returnTarget = Expression.Label(type);
- exps.Add(Expression.Return(returnTarget, typeParam));
- exps.Add(Expression.Label(returnTarget, Expression.Default(type)));
- var block = Expression.Block(new[] { tempRef }, exps);
- var @delegate = Expression.Lambda(block, typeParam, dicParam).Compile();
- return @delegate;
- });
- 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.csproj b/Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.csproj
deleted file mode 100644
index 321f8a2d9..000000000
--- a/Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.csproj
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
- netstandard2.1;net451;net45;
- True
- true
- FreeSql;ncc;YeXiangQin;Daily
- FreeSql 扩展包,可实现动态构建实体类,动态创建表.
- https://github.com/2881099/FreeSql
- https://github.com/2881099/FreeSql
- git
- MIT
- FreeSql;ORM
- $(AssemblyName)
- logo.png
- $(AssemblyName)
- true
- true
- true
- key.snk
- false
- 3.2.694 $(AssemblyName)
- logo.png
- $(AssemblyName)
- true
- true
- true
- key.snk
- false
- FreeSql.Extensions.DynamicEntity.xml
-
-
-
-
-
-
-
- Always
-
-
-
-
\ 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
deleted file mode 100644
index a2ae1e551..000000000
--- a/Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
- FreeSql.Extensions.DynamicEntity
-
-
-
-
- 动态创建实体类型
-
-
-
-
- 配置Class
-
- 类名
- 类标记的特性[Table(Name = "xxx")] [Index(xxxx)]
-
-
-
-
- 配置属性
-
- 属性名称
- 属性类型
- 属性标记的特性-支持多个
-
-
-
-
- 配置父类
-
- 父类类型
-
-
-
-
- Emit动态创建出Class - Type
-
-
-
-
-
- 首字母小写
-
-
-
-
-
-
- 首字母大写
-
-
-
-
-
-
- 动态创建对象帮助类
-
-
-
-
- 动态构建Class - Type
-
-
-
-
-
- 委托缓存
-
-
-
-
- 设置动态对象的属性值
-
-
-
-
-
-
-
diff --git a/Extensions/FreeSql.Extensions.DynamicEntity/key.snk b/Extensions/FreeSql.Extensions.DynamicEntity/key.snk
deleted file mode 100644
index e580bc8d5..000000000
Binary files a/Extensions/FreeSql.Extensions.DynamicEntity/key.snk and /dev/null differ
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 537315e21..26522f106 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -800,5 +800,14 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
diff --git a/FreeSql.Tests/FreeSql.Tests/DynamicEntity/DynamicEntityTest.cs b/FreeSql.Tests/FreeSql.Tests/DynamicEntity/DynamicEntityTest.cs
index 77579f8ce..c1385540e 100644
--- a/FreeSql.Tests/FreeSql.Tests/DynamicEntity/DynamicEntityTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/DynamicEntity/DynamicEntityTest.cs
@@ -11,15 +11,14 @@ namespace FreeSql.Tests.DynamicEntity
{
public class DynamicEntityTest
{
- private static IFreeSql fsql = new FreeSqlBuilder().UseConnectionString(DataType.PostgreSQL,
- "Host=192.168.0.36;Port=5432;Username=postgres;Password=123; Database=test;ArrayNullabilityMode=Always;Pooling=true;Minimum Pool Size=1")
+ private static IFreeSql fsql = new FreeSqlBuilder().UseConnectionString(DataType.Sqlite,
+ "data source=:memory:")
.UseMonitorCommand(d => Console.WriteLine(d.CommandText)).Build();
[Fact]
public void NormalTest()
{
- Type type = DynamicCompileHelper.DynamicBuilder()
- .Class("NormalUsers")
+ var table = fsql.CodeFirst.DynamicEntity("NormalUsers")
.Property("Id", typeof(string))
.Property("Name", typeof(string))
.Property("Address", typeof(string))
@@ -30,18 +29,17 @@ namespace FreeSql.Tests.DynamicEntity
["Id"] = Guid.NewGuid().ToString(),
["Address"] = "北京市"
};
- var instance = DynamicCompileHelper.CreateObjectByType(type, dict);
+ var instance = table.CreateInstance(dict);
//根据Type生成表
- fsql.CodeFirst.SyncStructure(type);
- fsql.Insert