From fb7eb01a2bbff9e3db5f8479bec85a82825e169e Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@qq.com>
Date: Fri, 5 May 2023 17:01:52 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20OracleOledb=20?=
=?UTF-8?q?=E5=BC=95=E8=B5=B7=E7=9A=84=E8=AF=BB=E5=8F=96=E7=B1=BB=E5=9E=8B?=
=?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9B=20-=20=E8=B0=83=E6=95=B4=20DynamicE?=
=?UTF-8?q?ntity=20API=EF=BC=9B#1505?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../DynamicCompileHelper.cs | 92 ---------
.../FreeSql.Extensions.DynamicEntity.csproj | 42 ----
.../FreeSql.Extensions.DynamicEntity.xml | 81 --------
.../FreeSql.Extensions.DynamicEntity/key.snk | Bin 596 -> 0 bytes
FreeSql.DbContext/FreeSql.DbContext.xml | 9 +
.../DynamicEntity/DynamicEntityTest.cs | 37 ++--
.../FreeSql.Tests/FreeSql.Tests.csproj | 1 -
FreeSql.sln | 15 --
.../Extensions/DynamicEntityExtensions.cs | 69 ++++++-
FreeSql/FreeSql.xml | 183 ------------------
.../SelectProvider/Select0Provider.cs | 1 +
.../SelectProvider/Select0ProviderReader.cs | 5 +-
.../FreeSql.Provider.MySql/MySqlProvider.cs | 7 +-
.../FreeSql.Provider.Oracle/OracleProvider.cs | 17 +-
14 files changed, 109 insertions(+), 450 deletions(-)
delete mode 100644 Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs
delete mode 100644 Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.csproj
delete mode 100644 Extensions/FreeSql.Extensions.DynamicEntity/FreeSql.Extensions.DynamicEntity.xml
delete mode 100644 Extensions/FreeSql.Extensions.DynamicEntity/key.snk
rename Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileBuilder.cs => FreeSql/Extensions/DynamicEntityExtensions.cs (79%)
diff --git a/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs b/Extensions/FreeSql.Extensions.DynamicEntity/DynamicCompileHelper.cs
deleted file mode 100644
index dec44591..00000000
--- 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 321f8a2d..00000000
--- 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 a2ae1e55..00000000
--- 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 e580bc8d5d64e7c5a0c62b971545d38cfbe7d837..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 596
zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50096c(W3|+clf|4d2=6Xc+R`Gd@9@k@Meh}
zR8`}1=JPk=q?Zlr?i$1O?SgX-{{&z
z|LRF?-aWODhAO}h_7M!wz}uPXx}n-g{((r9{{%_
z4)%gVXcj;Ru@GYAIZI@e#GBtO#O5m-Qr4X_lbAV}=qNRkd0^`@I6i9k`wSe@ZPxVo
zk;MXig(S-cYHE!0GWWlp7EH@E!WkF6jS+3z4rvW0%Sq;U1bq`B9*HNJjxo*23*7Vw
zHyt>{2CR~8==`lYLgAmwsXPXYZ_AEAKy|PuUz0(G)L1xO{{*n6Bn?mV~QKg!055THihpc>GOh(U-NgO?4_DzY4uq!p9=Q;`G
i9;v3GkC674Mbx4_b$)?7a0%Z%&zUjzbGs@!l^s|B
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 537315e2..26522f10 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 77579f8c..c1385540 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