From 619f7133121677bf955097577fc5af58d406591c Mon Sep 17 00:00:00 2001 From: vsuyi <454670@qq.com> Date: Sun, 3 Mar 2024 11:53:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86TypeBuilder?= =?UTF-8?q?=E5=8F=AA=E8=AF=BB=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Extensions/DynamicEntityExtensions.cs | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/FreeSql/Extensions/DynamicEntityExtensions.cs b/FreeSql/Extensions/DynamicEntityExtensions.cs index 7a675217..6061546c 100644 --- a/FreeSql/Extensions/DynamicEntityExtensions.cs +++ b/FreeSql/Extensions/DynamicEntityExtensions.cs @@ -87,6 +87,7 @@ namespace FreeSql.Extensions.DynamicEntity private List _properties = new List(); private Type _superClass = null; private IFreeSql _fsql = null; + private TypeBuilder _typeBuilder = null; /// /// 配置Class @@ -99,8 +100,25 @@ namespace FreeSql.Extensions.DynamicEntity _fsql = fsql; _className = className; _tableAttributes = attributes; + + //初始化AssemblyName的一个实例 + var assemblyName = new AssemblyName("FreeSql.DynamicCompileBuilder"); + //设置程序集的名称 + var defineDynamicAssembly = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); + //动态在程序集内创建一个模块 + var defineDynamicModule = + defineDynamicAssembly.DefineDynamicModule("FreeSql.DynamicCompileBuilder.Dynamics"); + + //动态的在模块内创建一个类 + _typeBuilder = + defineDynamicModule.DefineType(_className, TypeAttributes.Public | TypeAttributes.Class, _superClass); } + /// + /// 获取类型构建器,可作为要构建的Type来引用 + /// + public TypeBuilder TypeBuilder { get { return _typeBuilder; } } + /// /// 配置属性 /// @@ -388,25 +406,14 @@ namespace FreeSql.Extensions.DynamicEntity /// public TableInfo Build() { - //初始化AssemblyName的一个实例 - var assemblyName = new AssemblyName("FreeSql.DynamicCompileBuilder"); - //设置程序集的名称 - var defineDynamicAssembly = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); - //动态在程序集内创建一个模块 - var defineDynamicModule = - defineDynamicAssembly.DefineDynamicModule("FreeSql.DynamicCompileBuilder.Dynamics"); - //动态的在模块内创建一个类 - var typeBuilder = - defineDynamicModule.DefineType(_className, TypeAttributes.Public | TypeAttributes.Class, _superClass); - //设置TableAttribute - SetTableAttribute(ref typeBuilder); + SetTableAttribute(ref _typeBuilder); //设置属性 - SetPropertys(ref typeBuilder); + SetPropertys(ref _typeBuilder); //创建类的Type对象 - var type = typeBuilder.CreateTypeInfo().AsType(); + var type = _typeBuilder.CreateTypeInfo().AsType(); return _fsql.CodeFirst.GetTableByEntity(type); } From 1cec90729e093d7777009138d77382feae87f1f2 Mon Sep 17 00:00:00 2001 From: vsuyi <454670@qq.com> Date: Tue, 5 Mar 2024 07:28:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=85=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E7=B1=BB=E5=9E=8B=E4=B8=8D=E9=99=84=E5=B8=A6=E8=8E=B7?= =?UTF-8?q?=E5=8F=96TableInfo=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Extensions/DynamicEntityExtensions.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/FreeSql/Extensions/DynamicEntityExtensions.cs b/FreeSql/Extensions/DynamicEntityExtensions.cs index 6061546c..8a73d08b 100644 --- a/FreeSql/Extensions/DynamicEntityExtensions.cs +++ b/FreeSql/Extensions/DynamicEntityExtensions.cs @@ -405,6 +405,15 @@ namespace FreeSql.Extensions.DynamicEntity /// /// public TableInfo Build() + { + return _fsql.CodeFirst.GetTableByEntity(BuildJustType()); + } + + /// + /// Emit动态创建出Class - Type,不附带获取TableInfo + /// + /// + public Type BuildJustType() { //设置TableAttribute SetTableAttribute(ref _typeBuilder); @@ -413,9 +422,7 @@ namespace FreeSql.Extensions.DynamicEntity SetPropertys(ref _typeBuilder); //创建类的Type对象 - var type = _typeBuilder.CreateTypeInfo().AsType(); - - return _fsql.CodeFirst.GetTableByEntity(type); + return _typeBuilder.CreateTypeInfo().AsType(); } ///