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