XAF-DevExpress.ExpressApp.DC.Xpo.XpoTypeInfoSource 生成实体的过程-学习笔记
//目的,想自己生成实体类,不走dc的生成机制,所以研究一下此方法。
public void GenerateEntities(string generatedAssemblyFile)
{
lock (this.lockObjectForDC)
{
//此数组为要生成代码的接口类型
Type[] entityInterfaces = this.entitiesToGenerateInfo.GetEntityInterfaces();
if (!this.IsAlreadyBuild && (entityInterfaces.Length > ))
{
//生成过了,且有实体接口,有文件的情况下,直接加载
if (File.Exists(generatedAssemblyFile))
{
this.generatedAssembly = Assembly.LoadFrom(generatedAssemblyFile);
}
else
{
//没有文件,马上生成一个。
DCBuilder builder = new DCBuilder(this.typesInfo);
builder.Setup(this.entitiesToGenerateInfo, this.customLogics, this.existingImplementorsInfo);
this.generatedAssembly = builder.GetAssembly(generatedAssemblyFile);
}
this.ProcessGeneratedAssembly(this.generatedAssembly);
//遍历所有的实体类,即接口定义
Dictionary<Type, object> dictionary = new Dictionary<Type, object>();
foreach (Type type in entityInterfaces)
{
//没处理过的
if (!dictionary.ContainsKey(type))
{
dictionary.Add(type, null);
//标记为处理过。
//处理“基”接口
foreach (Type type2 in type.GetInterfaces())
{
//已经注册过的实体类中包含这个接,且,没处理过此接口时,把基接口也加进来
if (this.registeredEntityTypes.Contains(type2) && !dictionary.ContainsKey(type2))
{
dictionary.Add(type2, null);
}
}
}
}
foreach (Type type3 in dictionary.Keys)
{
//上面收集到了所有需要用到的接口,刷新类型信息。使用实际类型查找接口
this.typesInfo.RefreshInfo(type3);
Type entityTypeByInterface = this.GetEntityTypeByInterface(type3);
if (entityTypeByInterface != null)
{
this.typesInfo.RefreshInfo(entityTypeByInterface);
foreach (TypeInfo info in this.typesInfo.FindTypeInfo(entityTypeByInterface).RequiredTypes)
{
info.Refresh(true);
}
}
Type dataTypeByInterface = this.GetDataTypeByInterface(type3);
if (dataTypeByInterface != null)
{
this.typesInfo.RefreshInfo(dataTypeByInterface);
}
}
foreach (Type type6 in this.generatedAssembly.GetExportedTypes())
{
if (this.TypeIsKnown(type6))
{
TypeInfo info2 = this.typesInfo.FindTypeInfo(type6);
if ((info2 != null) && (info2.Source != this))
{
info2.Source = this;
this.typesInfo.RefreshInfo(type6);
//类typeinfo附source的值,即TypeInfoSource
}
}
}
}
}
}
XAF-DevExpress.ExpressApp.DC.Xpo.XpoTypeInfoSource 生成实体的过程-学习笔记的更多相关文章
- java生成二维码学习笔记
纠错等级: QRErrorCorrectLevel.L 7%的字码可被修正 QRErrorCorrectLevel.M 15%的字码可被修正 QRErrorCorrectLevel.Q 25%的字码可 ...
- T4模板根据DB生成实体类
1.前言 为什么会有这篇文章了,最近看到了一些框架,里面要写的代码太多了,故此就想偷懒,要是能写出一个T4模板,在数据库添加表后,根据模板就可以自动生成了类文件了,这样多好,心动不如行动.记得使用T4 ...
- 使用T4为数据库自动生成实体类
T4 (Text Template Transformation Toolkit) 是一个基于模板的代码生成器.使用T4你可以通过写一些ASP.NET-like模板,来生成C#, T-SQL, XML ...
- T4模板_根据DB生成实体类
为了减少重复劳动,可以通过T4读取数据库表结构,生成实体类,用下面的实例测试了一下 1.首先创建一个项目,并添加文本模板: 2.添加 文本模板: 3.向T4文本模板文件添加代码: <#@ tem ...
- 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法
由于最近公司在用webform开发ERP,用到大量重复机械的代码,之前写了篇文章,懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法,但是有人觉得这种方法 ...
- NHibernate生成实体类、xml映射文件
最近工作电脑装完win10后,之前使用的codeSmith安装不了,索性自己写一个. 界面比较简单,如下图: 第一行为Oracle数据库的连接字符串.连接成功后,填充表到第4行的下拉列表中. 第二行为 ...
- VS2015 +EF6 连接MYSQL数据库生成实体
VS2015 +EF6 连接MYSQL数据库生成实体 已安装软件:VS2015 XAMPP Control Panel(Mysql服务器) ...
- springmvc学习笔记--mybatis--使用插件自动生成实体和mapper
由于表对象在开发过程中会增删字段,有时候需要重新生成实体和对应的mapper,这时候可以通过mybatis的插件的生成. 优点是快速简洁,缺点同样很明显:覆盖.因此,通常是在第一次搭建框架的时候使用, ...
- spring boot 框架 启动更新项目,以及生成 "实体_"文件
1.更新项目 clean ---> 更新项目 ---> package--->refresh 即可.(这几个步骤一个不能够少) 2.项目中的类的依赖关系存在,但是无法导入依赖 m ...
随机推荐
- 一、CSS概述 二、CSS的选择器(认识) 三、CSS样式和属性(练习) 四、重构商城首页DIV+CSS(页面布局)(重点) 浮动/更改显示方式
一.CSS概述###<1>概念 DIV,就是一个HTML元素,块级元素,通常结合CSS进行页面的布局. CSS,层叠样式表,给HTML元素增强显示. ###<2>作用 样式定义 ...
- 深入浅出SharePoint2013——获取Application Pool的id和name对照表
PS C:\Users\Mingle> Get-SPServiceApplicationPool | select Id, Name Id Name-- ----f864f712-faa4-4a ...
- npm install --save 和 --save-dev的区别
--save 会把依赖包名称添加到 package.json 文件 "dependencies" 键下--save-dev 则添加到 package.json 文件 "d ...
- codeforces 424D Biathlon Track
codeforces 424D Biathlon Track 题意 题解 代码 #include<bits/stdc++.h> using namespace std; #define f ...
- 鼠标有但是U盘读取不出来怎么办
我今天就遇到了这个问题,搞了半天最后下了一个驱动人生,查看里面的回答才解决 就是把里面通用串行总控制器设置为隐藏文件可读之后选择把灰色的都删除就好了.具体可以在驱动人生里搜U盘不识别,之后就4,5步即 ...
- kudu安装部署
安装部署节点规划 节点 kudu-master kudu-tserver node01 是 是 node02 是 是 node03 是 是 配置本地Yum的Repository 下载kudu安装yum ...
- 跟我一起阅读Java源代码之HashMap(二)
上一节中实现的SimpleHashMap,没有解决冲突的问题,这一节我们继续深入 由于table的大小是有限的,而key的集合范围是无限大的,所以寄希望于hashcode散落,肯定会出现多个key散落 ...
- idea html热部署
IDEA SpringBoot 热部署+html修改无需make自动刷新 收藏 HeyS1 发表于 3个月前 阅读 310 收藏 2 点赞 0 评论 0 特邀IBM大咖的主题沙龙,5月20日·北京·3 ...
- [HNOI2003]操作系统
嘟嘟嘟 这道题就是一个模拟. 首先我们建一个优先队列,存所有等待的进程,当然第一关键字是优先级从大到小,第二关键字是到达时间从小到大.然后再建一个指针Tim,代表cpu运行的绝对时间. 然后分一下几种 ...
- ES6新特性4:字符串的扩展
本文摘自ECMAScript6入门,转载请注明出处. 一.ES5字符串函数 concat: 将两个或多个字符的文本组合起来,返回一个新的字符串. indexOf: 返回字符串中一个子串第一处出现的索引 ...