Merge pull request #1740 from vsuyi/master

DynamicEntity.DynamicCompileBuilder增加TypeBuilder只读属性和仅构建类型的方法
This commit is contained in:
2881099 2024-03-05 07:56:16 +08:00 committed by GitHub
commit 6c10057459
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -87,6 +87,7 @@ namespace FreeSql.Extensions.DynamicEntity
private List<DynamicPropertyInfo> _properties = new List<DynamicPropertyInfo>(); private List<DynamicPropertyInfo> _properties = new List<DynamicPropertyInfo>();
private Type _superClass = null; private Type _superClass = null;
private IFreeSql _fsql = null; private IFreeSql _fsql = null;
private TypeBuilder _typeBuilder = null;
/// <summary> /// <summary>
/// 配置Class /// 配置Class
@ -99,8 +100,25 @@ namespace FreeSql.Extensions.DynamicEntity
_fsql = fsql; _fsql = fsql;
_className = className; _className = className;
_tableAttributes = attributes; _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);
} }
/// <summary>
/// 获取类型构建器可作为要构建的Type来引用
/// </summary>
public TypeBuilder TypeBuilder { get { return _typeBuilder; } }
/// <summary> /// <summary>
/// 配置属性 /// 配置属性
/// </summary> /// </summary>
@ -388,27 +406,23 @@ namespace FreeSql.Extensions.DynamicEntity
/// <returns></returns> /// <returns></returns>
public TableInfo Build() public TableInfo Build()
{ {
//初始化AssemblyName的一个实例 return _fsql.CodeFirst.GetTableByEntity(BuildJustType());
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);
/// <summary>
/// Emit动态创建出Class - Type不附带获取TableInfo
/// </summary>
/// <returns></returns>
public Type BuildJustType()
{
//设置TableAttribute //设置TableAttribute
SetTableAttribute(ref typeBuilder); SetTableAttribute(ref _typeBuilder);
//设置属性 //设置属性
SetPropertys(ref typeBuilder); SetPropertys(ref _typeBuilder);
//创建类的Type对象 //创建类的Type对象
var type = typeBuilder.CreateTypeInfo().AsType(); return _typeBuilder.CreateTypeInfo().AsType();
return _fsql.CodeFirst.GetTableByEntity(type);
} }
/// <summary> /// <summary>