//目的,想自己生成实体类,不走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. shell study

    目录 shell记录 执行脚本 变量使用 注释 shell传递参数 运算符 echo printf test 流程控制 if ... else ... for while until case 跳出循 ...

  2. JS代码高亮编辑器 ace.js

    JS代码高亮编辑器 ace.js 字数254 阅读2 评论0 喜欢0 瞎扯 ace 是 js 实现的代码编辑器 编译打包之后的 ACE 代码 官网,未提供编译好的文件 ACE 拥有的特点 语法高亮超过 ...

  3. 前端统计利器:Sentry & Matomo

    今天主要说下两款前端统计工具的使用,Sentry & Matomo.以下主要是统计代码接入方式,因此使用前提是你已经在自己的服务器上搭建好了Sentry和Matomo的服务器 Sentry统计 ...

  4. 2.1 The Python Interpreter(python解释器)

    2.1 The Python Interpreter(Python解释器) Python是一门解释性语言.Python的解释器一次只能运行一个命令.标准的Python解释器环境可以用通过输入pytho ...

  5. Elasticsearch简单使用和环境搭建

    Elasticsearch简单使用和环境搭建 1 Elasticsearch简介 Elasticsearch是一个可用于构建搜索应用的成品软件,它最早由Shay Bannon创建并于2010年2月发布 ...

  6. 20155314 2016-2017-2《Java程序设计》课程总结

    20155314 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:刘子健的第一篇博客 预备作业2:刘子健的第二篇博客--有关CCCCC语言(・᷄ᵌ・᷅) ...

  7. layui弹出层之应用实例讲解

    从酒店管理系统到智能门锁及其现在的资源共享平台,layui框架,我们团队用的比较多的就是这个layui弹出层. layui弹出层,除了页面iframe层我们比较常用还有就是表单校验和其他相关的友好提示 ...

  8. 记录一个python公式罗列的方法 join()方法和map()方法的妙用

    题干: 怎样将一个列表中的元素读出,并列出计算式子 比如:[,,,] 输出:+++ = 列表中的元素个数不定 小白和大神的方法: #小白的 numlist=[,,,] sum1='' cal='+' ...

  9. Spring整合MyBatis(二)Spring整合MyBatis

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 了解了MyBatis的独立使用过程后,我们再看看它与Spring整合的 ...

  10. openshift 入门 部署 openshift-origin-server-v3.7.0

    OpenShift是一个基于容器技术的云平台,这里的容器技术指的就是docker和kubernetes. Openshift 错误解决 错误信息 failed to run Kubelet: fail ...