增加了TypeBuilder只读属性

This commit is contained in:
vsuyi 2024-03-03 11:53:22 +08:00
parent ad771859b0
commit 619f713312

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,25 +406,14 @@ namespace FreeSql.Extensions.DynamicEntity
/// <returns></returns> /// <returns></returns>
public TableInfo Build() 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 //设置TableAttribute
SetTableAttribute(ref typeBuilder); SetTableAttribute(ref _typeBuilder);
//设置属性 //设置属性
SetPropertys(ref typeBuilder); SetPropertys(ref _typeBuilder);
//创建类的Type对象 //创建类的Type对象
var type = typeBuilder.CreateTypeInfo().AsType(); var type = _typeBuilder.CreateTypeInfo().AsType();
return _fsql.CodeFirst.GetTableByEntity(type); return _fsql.CodeFirst.GetTableByEntity(type);
} }