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 自定义代码生成模板 转的更多相关文章

  1. 基于Entity Framework的自定义分页,增删改的通用实现

    简介 之前写个一个基于Dapper的分页实现,现在再来写一个基于Entity Framework的分页实现,以及增删改的通用实现. 代码 还是先上代码:https://github.com/jinwe ...

  2. Entity Framework 6 自定义连接字符串ConnectionString连接MySQL

    在开始介绍之前,首先来看看官方对Entity Framework的解释:Entity Framework (EF) is an object-relational mapper that enable ...

  3. Entity Framework Code First学习系列目录

    Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...

  4. Entity Framework Code First学习系列

    Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...

  5. Entity Framework 6 Recipes 2nd Edition(目录索引)

    Chapter01. Getting Started with Entity Framework / 实体框架入门 1-1. A Brief Tour of the Entity Framework ...

  6. C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名

    转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就 ...

  7. Entity Framework 6新特性:全局性地自定义Code First约定

    2012年12月11日,Entity Framework已经发布了Entity Framework 6 Alpha2,因项目需要,目前已使用了其中的两个特性,今天就来介绍一下第一个特性:全局性地自定义 ...

  8. 【EF】Entity Framework 6新特性:全局性地自定义Code First约定

    应用场景 场景一:EF Code First默认使用类名作为表名,如果我们需要给表名加个前缀,例如将类名Category映射到表Shop_Category.将Product映射到Shop_Produc ...

  9. 使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First

    [前言] 如果是Code First老鸟或者对Entity Framework不感兴趣,就不用浪费时间往下看了. 记得09年第一次接触ORM————Linq2Sql,从此对她的爱便一发不可收拾,一年后 ...

随机推荐

  1. UIViewAdditions(一个非常方便的工具类用它)

    我们在project在,改变或多或少控件的坐标-宽度-高度,然后,经常看到你的self.view.frame.origin.x,self.view.frame.size.width.........相 ...

  2. java处理Excel文件---excel文件的创建,删除,写入,读取

    这篇文章的代码是我封装的excel处理类,包含推断excel是否存在,表格索引是否存在,创建excel文件,删除excel文件,往excel中写入信息,从excel中读取数据. 尤其在写入与读取两个方 ...

  3. lol盒子重点内容

    //AFN函数 - imageview载入网络图片而且获取图片,获取之后存储到手机   [image setImageWithURLRequest:[NSURLRequest requestWithU ...

  4. MEF实现设计上的“松耦合”

    C#进阶系列——MEF实现设计上的“松耦合”(二)   前言:前篇 C#进阶系列——MEF实现设计上的“松耦合”(一) 介绍了下MEF的基础用法,让我们对MEF有了一个抽象的认识.当然MEF的用法可能 ...

  5. java缓存技术(转)

    最近在做java缓存,了解了一下.以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点: 1:清理及更新缓存时机的处理:   . 虚拟机内存不足,清理缓存   .. 缓存时间超时,或访问 ...

  6. Python输出文件由线解释和扩展的具体内容

    结束此处的测试代码中作者写的,第一段包含不正确的版本号,后者是正确的版本号: #! /usr/bin/python2.7 try:     filename = raw_input('please i ...

  7. 如何用Excel直接查询Oracle中的数据(转)

    将Oracle中查询的数据保存为Excel文件,通常使用的是PL/SQL Developer. 其实,Excel可直接写SQL语句查询Oracle中数据,在这里,用到ODBC驱动.详细步骤如下: 一. ...

  8. hdu2369 Broken Keyboard(类似dfs)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=2369">http://acm.hdu.edu.cn/showproblem.php ...

  9. Eclipse:引用一个项目作为库(图文教程)

    前言:工程TestRoid要引用Volley项目作为一个库 过程,如下面: 一:选择导入Android工程 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc ...

  10. js 正则学习小记之左最长规则

    原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'nfa'.其实我们的本意是想得到整 ...