Entity Framework 5 自定义代码生成模板 转
Entity Framework 5 发布有一定时间了,但学习资源确实不多,更何况英语差的我,看英语确实费力,不管怎么样,问题还是解决了,查看很多人写的文章(让我看的想放弃,更想找到答案),都没有到到关于自定义代码生成的模板的文章,最后打开VS2010 创建了一个model.tt文件,最终在它里面找到了相应的方法,现给大家分享一下。(最近也写过两篇关于EF5的文章)
在自定义过程中,发现有几处问题,可能是Bug,也可能是故意这样设计的,但这两位问题对个人来说,还是有一定的影响,总觉得不太完美,希望这几位在后续的版本当中会得到改善,下面会列出这几个问题。
第一步:介绍一下Model的目录结构,与以前的版本变化还是比较大的


第二步:打开代码生成文件Model.tt,从网上了解到.tt文件是权限T4写的,本人不了解T4,不知是否真假,应该不会错的,呵呵,如果对T4了解的人,看起来应该会很简单。
打开.tt文件,找到如下代码,这是生成类属性的主要代码

var simpleProperties = typeMapper.GetSimpleProperties(entity);
if (simpleProperties.Any())
{
foreach (var edmProperty in simpleProperties)
{
#>
<#=codeStringGenerator.Property(edmProperty)#>
<#
}
}

生成如下代码

修改后的代码,主要代码就是edmProperty.Documentation != null && edmProperty.Documentation.Summary != null

var simpleProperties = typeMapper.GetSimpleProperties(entity);
if (simpleProperties.Any())
{
foreach (var edmProperty in simpleProperties)
{
#>
<# if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null)
{
#>
/// <summary><#= edmProperty.Documentation.Summary #></summary>
<#=codeStringGenerator.Property(edmProperty)#>
<# }#>
<# if (edmProperty.Documentation == null)
{
#>
<#=codeStringGenerator.Property(edmProperty)#>
<# }#>
<#
}
}

生成后的类属性,加上了注释

类属性定义可以,哪么 DbSet 和Class 是否也可以加上注视呢,结果测试发现了问题,这里可能是Bug,因为每次得到的Documentation 总是Null
打开 Model.Content.tt文件

修改如何代码为 但这里的 entitySet.Documentation 总是 Null ,可能是Bug吧

foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
{
#>
<# if (entitySet.Documentation != null && entitySet.Documentation.Summary != null)
{
#>
/// <summary><#= entitySet.Documentation.Summary #></summary>
<#=codeStringGenerator.DbSet(entitySet)#>
<# }#> <# if (entitySet.Documentation == null)
{
#>
/// <summary><#= entitySet #></summary>
<#=codeStringGenerator.DbSet(entitySet)#>
<# }#>
<#
}

第二个可能的小Bug是在复制实体时,其的属性都可以复制,但是文档属性不能复制过来


另外,以上都是类文件的定义,生成的Sql语句没有注释,但也没找到相应生成Sql的模板,如果可以定义Sql模板,就可以把生成的Sql代上注释,这样就完美了,如果哪位兄弟知道如何定义Sql模板和解决上面的两个问题,请留言,与大家一起分享
Entity Framework 5 自定义代码生成模板 转的更多相关文章
- 基于Entity Framework的自定义分页,增删改的通用实现
简介 之前写个一个基于Dapper的分页实现,现在再来写一个基于Entity Framework的分页实现,以及增删改的通用实现. 代码 还是先上代码:https://github.com/jinwe ...
- Entity Framework 6 自定义连接字符串ConnectionString连接MySQL
在开始介绍之前,首先来看看官方对Entity Framework的解释:Entity Framework (EF) is an object-relational mapper that enable ...
- Entity Framework Code First学习系列目录
Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...
- Entity Framework Code First学习系列
Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...
- Entity Framework 6 Recipes 2nd Edition(目录索引)
Chapter01. Getting Started with Entity Framework / 实体框架入门 1-1. A Brief Tour of the Entity Framework ...
- C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名
转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就 ...
- Entity Framework 6新特性:全局性地自定义Code First约定
2012年12月11日,Entity Framework已经发布了Entity Framework 6 Alpha2,因项目需要,目前已使用了其中的两个特性,今天就来介绍一下第一个特性:全局性地自定义 ...
- 【EF】Entity Framework 6新特性:全局性地自定义Code First约定
应用场景 场景一:EF Code First默认使用类名作为表名,如果我们需要给表名加个前缀,例如将类名Category映射到表Shop_Category.将Product映射到Shop_Produc ...
- 使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First
[前言] 如果是Code First老鸟或者对Entity Framework不感兴趣,就不用浪费时间往下看了. 记得09年第一次接触ORM————Linq2Sql,从此对她的爱便一发不可收拾,一年后 ...
随机推荐
- Javascript继承之最佳实践
尊重原创,转载请注明出处:http://blog.csdn.net/zoutongyuan 什么是继承? 继承是面向对象最显著的一个特性.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和 ...
- MPQ Storm库 源代码分析 一个
MPQ什么? MPQ维基上说的非常明确. 简而言之,它是暴雪公司用于游戏数据打包的工具.星际争霸,魔兽争霸游戏中都有使用.该工具内含游戏资源加密和压缩等功能. git下载地址:http ...
- Spring.NET程序
第一个Spring.NET程序 Spring.NET环境准备 pring.NET 1.3.2下载地址:http://down.51cto.com/data/861700 下载后解压 Spring. ...
- 用脚本安装IIS
原文:用脚本安装IIS 基本命令:Sysocmgr.exe /i:sysoc.inf /u:c:/iis.txt c:/iis.txt是IIS要安装的组件列表 [Components]iis_comm ...
- angularjs从零开始(一)
简介 AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.所以我做了一些工作(你也可以觉得是小 ...
- 毕业后的第二份工作:进入国外 在新加坡工作 每月一次18K
--訪传智播客成都校区12.26就业班学员 杨洋 姓名:杨洋 毕业院校:重庆科技学院 专业:电子信息技术与project 就职公司:新电科技 岗位:Javaproject师 月薪:18K 上午.他刚去 ...
- gets、scanf和getchar之间的区别
gets gets.scanf和getchar之间的区别 1. gets函数读取数据时,接受的数据包括数据和回车符.即:读取数据后输入流没有输入 操作动作. 2. scanf函数读取数据时,接受的数据 ...
- 编译器神vim改头换面
我相信,农民听到两件神器码,首先emacs,首先vim.大家都知道e党和v党总是吵架.竟,这无助于嘈杂.只是每个人都有自己的道理也适用.在接触vim,同时联系emacs.对于作家,我认为vim更适合. ...
- 【转】细说 Form (表单)
阅读目录 开始 简单的表单,简单的处理方式 表单提交,成功控件 多提交按钮的表单 上传文件的表单 MVC Controller中多个自定义类型的传入参数 F5刷新问题并不是WebForms的错 以Aj ...
- crawler_URL编码原理详解
经常写爬虫的童鞋,难免要处理含有中文的url,大部分时间,都知道url_encode,各个语言也都有支持,今天简单整理下原理,供大家科普 1.特征: 如果URL中含有非ASCII字符的话, 浏览器会对 ...