//目的,想自己生成实体类,不走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 生成实体的过程-学习笔记的更多相关文章

  1. java生成二维码学习笔记

    纠错等级: QRErrorCorrectLevel.L 7%的字码可被修正 QRErrorCorrectLevel.M 15%的字码可被修正 QRErrorCorrectLevel.Q 25%的字码可 ...

  2. T4模板根据DB生成实体类

    1.前言 为什么会有这篇文章了,最近看到了一些框架,里面要写的代码太多了,故此就想偷懒,要是能写出一个T4模板,在数据库添加表后,根据模板就可以自动生成了类文件了,这样多好,心动不如行动.记得使用T4 ...

  3. 使用T4为数据库自动生成实体类

    T4 (Text Template Transformation Toolkit) 是一个基于模板的代码生成器.使用T4你可以通过写一些ASP.NET-like模板,来生成C#, T-SQL, XML ...

  4. T4模板_根据DB生成实体类

    为了减少重复劳动,可以通过T4读取数据库表结构,生成实体类,用下面的实例测试了一下 1.首先创建一个项目,并添加文本模板: 2.添加 文本模板: 3.向T4文本模板文件添加代码: <#@ tem ...

  5. 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法

    由于最近公司在用webform开发ERP,用到大量重复机械的代码,之前写了篇文章,懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法,但是有人觉得这种方法 ...

  6. NHibernate生成实体类、xml映射文件

    最近工作电脑装完win10后,之前使用的codeSmith安装不了,索性自己写一个. 界面比较简单,如下图: 第一行为Oracle数据库的连接字符串.连接成功后,填充表到第4行的下拉列表中. 第二行为 ...

  7. VS2015 +EF6 连接MYSQL数据库生成实体

      VS2015 +EF6 连接MYSQL数据库生成实体   已安装软件:VS2015                       XAMPP Control Panel(Mysql服务器)      ...

  8. springmvc学习笔记--mybatis--使用插件自动生成实体和mapper

    由于表对象在开发过程中会增删字段,有时候需要重新生成实体和对应的mapper,这时候可以通过mybatis的插件的生成. 优点是快速简洁,缺点同样很明显:覆盖.因此,通常是在第一次搭建框架的时候使用, ...

  9. spring boot 框架 启动更新项目,以及生成 "实体_"文件

    1.更新项目 clean  --->  更新项目 ---> package--->refresh 即可.(这几个步骤一个不能够少) 2.项目中的类的依赖关系存在,但是无法导入依赖 m ...

随机推荐

  1. Matlab 之meshgrid, interp, griddata 用法和实例(转)

    http://blog.sina.com.cn/s/blog_67f37e760101bu4e.html 实例结果http://wenku.baidu.com/link?url=SiGsFZIxuS1 ...

  2. fun() 的 拆分和 for 遍历 的结合---------> 函数容器

    fun() 的 拆分和 for 遍历 的结合--------->  函数容器

  3. 1.6 Navigating This Book(本书导航)

    1.6 Navigating This Book(本书导航) 如果之前没有接触过Python,那么你应该在第2章和第3章多花一些时间.这两章介绍了Python语言的特性和IPython shell以及 ...

  4. BZOJ3270:博物馆(高斯消元)

    Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...

  5. 分布式缓存技术redis系列(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  6. windows 下nginx配置php支持

    修改nginx配置 location ~ \.php$ { root D:/Learn/php/test/; fastcgi_pass ; fastcgi_index index.php; fastc ...

  7. 如何使用eclipse运行简单的java程序

    打开eclipse,选择“file——new——Java project”   为我们的java项目取一个名字,然后点击完成.   这时候左侧列表就有了我们刚才新建的java项目,点开项目,在src目 ...

  8. JavaScript里的创建对象(一)

    一.序 面向对象有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.ECMA-262把对象定义为“无序属性的集合,其属性可以包含基本值.对象或者函数”. 使用Obje ...

  9. P1880 [NOI1995]石子合并

    题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

  10. 关于Android

    1:Handle与多线程 Handle是什么?官方说明:handle是Android给我们提供用来更新UI的一套机制,也是一套消息处理的机制.可以看出handle主要就是两个功能,一个是更新UI,另一 ...