【.NET】T4模板——SSDL To SQL10.tt

很多人喜欢模板,因为合理地使用工具可以帮我们少写很多代码,可是模板的复杂性却又让很多人在使用中困难重重.

我们在ITOO项目中,使用了DB
First和ModelFirst相结合的方式实现实体数据的映射.说得详细一点就是先将PowerDesigner设计的实体图导入数据库生成表,然后去掉外键关联,只保留主键.使用EF的DBFirst生成Model,在Model中手动添加关联关系,再根据模型生成数据库.

这样做有点繁琐,不过好处多多.首先避免了再次手动画Model,实体既多又容易出错,其次,如果数据库中有外键关联的话,映射到Model中会生成多余的属性,还需要我们手动维护.综合以上因素,我们选择二者结合的方式.

不过,在操作过程中还是会有错误.因为以上过程是自动映射,必然使用到了模板,而这里正是大量使用了T4模板(.tt文件).下面我要说的就是从SSDL生成SQL脚本时.tt文件.上篇博客中已经学习了.edmx文件的xml内容,已经知道SSDL描述了表,列,关系,主键及索引等数据库中存在的概念.在.edmx页面空白处右键,选择"根据模型生成数据库",正常情况下会生成sql语句,不正常情况下呢,模板也不是特别好使的,下图就出错了,我们来看一下:

分析了很久终于找到问题所在,大家可以双击错误列表的提示信息,跟踪到弹出文件,即SSDLToSQL10.tt.文件内容如下所示:

我知道很多人看到密密麻麻的代码页面尤其是这种可读性非常差的拼接类型的代码,都匆匆关闭了…可是问题就出在这里.找到上面被红色框出的一行代码DbConfiguration.SetConfiguration(newTemplateDbConfiguration());果断删掉.保存,生成,错误消失。

之前我尝试了很多方法,比如修改配置文件之类的,后来想想最容易出错的还是模板.有些东西因为不熟悉才不敢碰,可是若永远不碰,就没个日子熟悉了。

时间: 2024-10-10 00:56:23

【.NET】T4模板——SSDL To SQL10.tt的相关文章

通过T4模板解决EF模型序列号的循环引用问题

在模型的T4模板(如model.tt)中插入如下代码,这样由模板生成的模型代码中的导航属性将自动带有[JsonIgnore]标识,不会被序列化 1. 添加命名空间的引用 找到以下代码,添加using Newtonsoft.Json; BeginNamespace(code);#>using Newtonsoft.Json;<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 2.为导航属性添加JsonIgnore标签 找到以下

《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章

<如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章 问题:   VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何编程让一个tt文件可以输出多个结果文件. 回答:   <#@ Import Namespace="System.Text" #> <#@ import namespace="System.IO" #> <#@ Import Namespace=

T4模板:T4模板之菜鸟篇

一.废话 T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎.在 Visual Studio 中,"T4 文本模板"是由一些文本块和控制逻辑组成的混合模板,它可以生成文本文件. 在 Visual C# 或 Visual Basic 中,控制逻辑编写为程序代码的片段.生成的文件可以是任何类型的文本,例如网页.资源文件或任何语言的程序源代码.现在的VS中只要与代码生成相关的场景基本上都能找T

MVC 之 T4模板简介

个人网站地址:nee32.com 一.T4模板内容简介 为了更好地学习T4模板,我们安装一个插件tangible T4 Editor 在使用了EF生成实体类后,我们会发现一个.tt后缀的文件,它就是T4模板,直接打开 它的内容如下图: 就是这一个模板,生成了我们需要的类,省去了我们手写的麻烦,提高了工作效率,生成的实体类如下图: 那么,这些类是如何用T4模板生成出来的?要自定义模板又该如何操作? 下面来简单介绍下T4模板中的核心代码 1.全局变量申明 <#@ template language=

从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)

原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大,基本将Web层要使用到的大部分函数都用模板生成了出来,而模板中的函数,很多也是互相关联调用的.另外在DotNet.Utilities(公共函数项目)中也添加与修改了一些类和函数. 需要特别说明的是,在逻辑层添加了July大神编写的超强上传类,具体怎么使用功能怎么强大,在后面调用到时会用一个章节详细说

[转]MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

本文转自:http://www.cnblogs.com/guomingfeng/p/mvc-ef-t4.html 〇.目录 一.前言 二.工具准备 三.T4代码生成预热 (一) 单文件生成:HelloWorld.cs (二) 多文件生成 四.生成数据层实体相关相似代码 (一) 生成准备 (二) 生成实体相关相似代码 生成实体映射配置类 生成实体仓储接口 生成实体仓储实现 五.源码获取 系列导航 一.前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少

T4模板:T4模板之基础篇

一.回顾 上一篇文章 --T4模板之菜菜鸟篇,我们囫囵吞枣的创建了与"T4模板"有关的文件.在创建各个文件的这一个过程中,我们对于T4模板有了那么丁点的认识.现在就带着之前的那些问题,正式的迈入对"T4模板"的学习. 二.概念 2.1.类型 T4 文本模板有两种类型: 设计时 T4 文本模板 运行时 T4 文本模板 三.简要教程 我们只讲"设计时T4文本模板",其他的都TMD属于高级部分了,哥不懂给不给? 打开之前我们创建的"TextT

一个基于DpperHelper的t4模板

Model Model Model <#@ template debug="false" hostspecific="true" language="C#" #><#@ output extension=".cs" #><#@ assembly name="System.Data.DataSetExtensions.dll" #><#@ import namespa

利用T4模板生成ASP.NET Core控制器的构造函数和参数

前言 在ASP.NET Core中引入了DI,并且通过构造函数注入参数,控制器中会大量使用DI注入各种的配置参数,如果配置注入的参数比较多,而且各个控制器需要的配置参数都基本一样的话,那么不断重复的复制黏贴代码提供相应的构造函数,效率低效也,因此使用T4模板生成控制器的构造函数 ,这也得益于C#对分部类(partial)的支持. T4模板生成控制器构造函数 图中CtrlTemplate.tt为模板文件,CtrlNames.txt为需要使用T4生成代码的控制器名称文件,CtrlTemplate.c