mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
Merge pull request #1740 from vsuyi/master
DynamicEntity.DynamicCompileBuilder增加TypeBuilder只读属性和仅构建类型的方法
This commit is contained in:
commit
6c10057459
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user