自定义t4模版,根据数据库生成实体模型

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: Template文件

Template文件

<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
<#@ import namespace="System" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>

<#+
public class ProcedureTemplate : Template
{
    public string DatabaseName {get; private set;}
	public string TableName{get;private set;}
	public Table Table {get; private set;}
	
	public const string VersionNoField 			= "VERSION_NO";
	public const string VersionNoParameterName 	= "@p_version_no";
	
	public ProcedureTemplate(string databaseName, string tableName)
	{
		this.DatabaseName 	= databaseName;
		this.TableName = tableName;
	}
	
	public virtual string GetProcedureName()
	{
		return this.TableName + "M";	
	}

    public override string TransformText()
    { 
		Server server = new Server();
        Database database = new Database(server, DatabaseName);
        var table = new Table(database, TableName);
        table.Refresh();
		WriteLine("using System;");
		WriteLine("using System.Runtime.Serialization;");
		WriteLine("namespace RTMDemo.Model");
		WriteLine("{");
		PushIndent("\t");
		WriteLine("[DataContract]");
		WriteLine("public class {0}M",TableName);
		WriteLine("{");
		PushIndent("\t");
		for(int i=0; i<table.Columns.Count;i++)
		{
			Column column = table.Columns[i];
			if(column.Name != VersionNoField)
			{
				WriteLine("[DataMember]");
				WriteLine("public Guid {0};",column.Name);
			}			
		}
		PopIndent();
		WriteLine("}");
		PopIndent();
		WriteLine("}");
        return this.GenerationEnvironment.ToString();
    }
}
#>

 

Generator

<#@ import namespace="System.Collections.Generic" #>
<#@ include file="ProcedureTemplate.tt" #>
<#@ include file="T4Toolbox.tt" #>
<#+
public class ProcedureGenerator : Generator
{
    public List<ProcedureTemplate> Templates{get; private set;}
  
  	public ProcedureGenerator(string databaseName, params string[] tableNames)
	{
		if(null == tableNames || tableNames.Length == 0)
		{
			throw new ArgumentNullException("数据表名有误");
		}	
		Templates = new List<ProcedureTemplate>();
		foreach(string tableName in tableNames)
		{			
			var t = new ProcedureTemplate(databaseName, tableName);
			Templates.Add(t);
		}
	}
	
	protected override void RunCore()
	{
		foreach(ProcedureTemplate tempalte in this.Templates)
		{
			tempalte.RenderToFile(tempalte.GetProcedureName() + ".cs");
		}
    }
}
#>
 

 

生成器

<#@ template language="C#" hostSpecific="true" debug="true" #>
<#@ include file="ProcedureGenerator.tt" #>
<#
   var tableNames = new string[]{"aa","bb"};
   new ProcedureGenerator("testDb",tableNames).Run();
#>
 

此文参考了artech的文章

http://www.cnblogs.com/artech/archive/2010/11/17/CodeGeneration.html

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
2月前
|
存储 缓存 NoSQL
数据库实体与关系模型
【5月更文挑战第16天】本文介绍了数据库模型和UML关系,UML包括依赖、关联(聚合、组合)、泛化和实现4类关系。UML有13种图,分为结构图、行为图和交互图。数据库的基本数据模型包括外模式(用户视图)、概念模式(全局逻辑结构)和内模式(物理存储)。数据模型三要素是数据结构、操作和约束条件。简单易用的缓存数据模型适用于需求灵活、高性能、大数据量且不要求强一致性的场景。
58 5
数据库实体与关系模型
|
2月前
|
SQL 存储 调度
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
一个合适的执行模型对于提高查询效率和系统性能至关重要。本文全面剖析 Apache Doris Pipeline 执行模型的设计与改造历程,并在 2.1 版本对并发执行模式与调度模式进一步优化,解决了执行并发受限、执行及调度开销大等问题。
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
|
1月前
|
存储 关系型数据库 MySQL
MySQL周内训参照1、ER实体关系图与数据库模型图绘制
MySQL周内训参照1、ER实体关系图与数据库模型图绘制
32 1
|
18天前
|
存储 SQL NoSQL
|
1月前
|
存储 XML SQL
数据库建模之EAV模型
数据库建模之EAV模型
36 1
|
1月前
|
存储 监控 数据管理
数据库原理与应用——简答题练习(数据管理技术发展、数据库主要特征、数据模型、关系模型、实体性之间的关系、DBMS的功能、相关术语解释、数据库系统)
数据库原理与应用——简答题练习(数据管理技术发展、数据库主要特征、数据模型、关系模型、实体性之间的关系、DBMS的功能、相关术语解释、数据库系统)
38 0
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库PolarDB自定义权限策略参考
本文介绍了自定义权限策略,它是RAM访问控制体系中除系统策略外,用户可创建、更新和删除的权限策略。用户需维护策略版本更新,并将策略绑定到RAM身份以授予权限。策略支持版本控制和删除,但删除前需确保无引用。文章提供了相关操作文档链接,包括创建、修改、删除策略及管理引用记录和版本。此外,列举了PolarDB在MySQL、PostgreSQL和XScale版的自定义权限策略场景和示例,并提示用户在使用时需了解授权信息。
38 0
|
2月前
|
数据采集 存储 人工智能
理解词向量、向量数据库、嵌入模型、数据预处理和本地知识库
本文介绍了词向量、向量数据库、嵌入模型和构建本地知识库等内容。
|
14天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
12天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
983 6
Mysql 数据库主从复制