自动生成仓储结构、实体结构 T4模板

网友投稿 262 2022-12-02

自动生成仓储结构、实体结构 T4模板

使用T4模板自动生成需要的数据库实体类、仓储类、仓储接口

提供的项目

AutoInfrastructGenerate - 提供基础生成实体(实体基础结构-不读取数据库-可手动扩展读取特定数据库实体类型)、仓储 -T4模板GenEntities-Mysql - 读取mysql中的表自动生成实体及仓储OracleGenerate - 读取oracle中的表自动生成实体 -读取oracle基表

AutoInfrastructGenerate

Entity.tt中提供了主要的逻辑Manager.ttinclude中提供了文件相关操作

OracleGenerate

AppSetting.json中保存了数据库连接字符串

原理

-- 获取用户创建的表select table_name from user_tables select * from user_tables where Table_Name = 'T_USER';--获取表字段select* from user_tab_columns where Table_Name = 'T_USER';--获取表注释select* from user_tab_comments user_tab_comments where Table_name='T_USER';--获取字段注释select * from user_col_comments where Table_name='T_USER';--获取主键select * --col.column_name from user_constraints con, user_cons_columns col where con.constraint_name = col.constraint_name and con.constraint_type='P' and col.table_name = 'T_USER'

基本数据配置

string baseNamespaceName="MES.Server.Manufacture"; //基础名称空间 string entityNamespaceName="Domain.Entity"; //实体名称空间 string repositoryNamespaceName="Infrastruct.Repository"; //仓储名称空间 string iRepositoryNamespaceName="Domain.IRepository"; //仓储接口名称空间 string tableDesc="测试表"; string tableName="t_pd_wo_issue_material"; string entityFileName="WorkorderIssueMaterial"; //实体基本名称 string entityName=entityFileName+"Entity"; //实体文件名称 string repositoryName=entityFileName+"Repository"; //仓储名称 string iRepositoryName="I"+repositoryName; //仓储基类 var manager = Manager.Create(Host, GenerationEnvironment); bool isBaseRepository=true; //是否生成基础仓储模型

文件相关操作

var manager = Manager.Create(Host, GenerationEnvironment);//开始文件写入,后续输出将写入此文件manager.StartNewFile(entityName + ".cs","Entities"); //Entities为保存的目录名称manager.EndBlock(); //结束当前文件写入manager.Process(true); //解析文件,将生成的数据导入配置的文件中

GenEntities-Mysql

主要逻辑在Generate.tt文件中

另外Manager.ttinclude文件中包含了创建文件的操作,使用此方法需要将Generate.tt文件中hostspecific设置为true

<#@ template debug="false" hostspecific="true" language="C#" #>

更新

添加对仓储模式自动生成的支持,可用通过修改Generate.tt文件中的needRepository改为true生成实体对应的仓储可以配置仓储对应的实体类、仓储接口、仓储类、上下文类的名称空间以及上下文类的配置

//配置默认的名称空间 var nameSpace="TestNameSpace"; //实体类名称空间 var EntityNameSpace="TestEntity"; //仓储接口名称空间 var IRepositoryNameSpace="TestRepository.IRepository"; //仓库名称空间 var RepositoryNameSpace="TestRepository.Repository"; //上下文类 var dbContextType="TestCommonContext"; //上下文类名称空间 var DBContext="TestRepository.DbContexts";

数据库的相关配置如下

数据库连接var connectionString = @"Server=127.0.0.1;port=3306;database=tianleclass;charset=utf8;uid=root;password=root";// 需要解析的数据库var database = new List { "tianleclass" };

如需将生成的文件输出到指定的位置,可以找到manager.StartNewFile方法的调用 第二个参数为希望生成的目录,基于项目目录的相对路径,尝试一下即可 另外预留了WCF的配置

// 是否是WCF服务模型bool serviceModel = false;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java多线程之搞定最后一公里详解
下一篇:fix协议封装挑战-BusinessMessageRejectMessageHandler
相关文章

 发表评论

暂时没有评论,来抢沙发吧~