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. 概率图形模型(PGM)学习笔记(四)-贝叶斯网络-伯努利贝叶斯-贝叶斯多项式

    之前忘记强调重要的差异:链式法则的条件概率和贝叶斯网络的链式法则之间的差异 条件概率链式法则 P\left({D,I,G,S,L} \right) = P\left( D \right)P\left( ...

  2. 采用Flume实时采集和处理数据

    它已成功安装Flume在...的基础上.本文将总结使用Flume实时采集和处理数据,详细过程,如下面: 第一步,在$FLUME_HOME/conf文件夹下,编写Flume的配置文件,命名为flume_ ...

  3. oracle 11g 基于磁盘的备份rman duplicate

    基于磁盘的备份rman duplicate 命令创建standby database 前提条件: 确保原始库数据库的备份.存档standby 结束是完全可见, 这里,如果原始文库和靶 - 侧数据文件, ...

  4. verilog中的有符号数运算

    verilog中的有符号数运算 http://hi.baidu.com/lixu1113/item/d00dc095f86aed48f142159a verilog中的有符号数运算 有符号数的计算:若 ...

  5. uva 1556 - Disk Tree(特里)

    题目连接:uva 1556 - Disk Tree 题目大意:给出N个文件夹关系,然后依照字典序输出整个文件文件夹. 解题思路:以每一个文件夹名作为字符建立一个字典树就可以,每一个节点的关系能够用ma ...

  6. 简单的工具LogUtil、Toast

    简单的工具LogUtil.Toast     能够用了 import android.content.Context; import android.util.Log; import android. ...

  7. linux下一个eclipse组态jdk

    今天ubuntu12.04安装eclipse,安装该想法eclipse后.还需要配置jdk.但没想到eclipse我有自己主动做好(但最主要的原因是我的linux在刚刚安装了一个jdk,假设有两个或更 ...

  8. Tyvj P1015 公路骑 (DP)

     叙述性说明 Description 一个特殊的单行道都在每公里公交车站.们乘坐汽车的公里使来付费. 比如例子的第一行就是一个费用的单子. 没有一辆车子行驶超过10公里.一个顾客打算行驶n公里(1 ...

  9. javascript系列之执行上下文

    原文:javascript系列之执行上下文 写在前面:一 直想系统的总结一下学过的javascript知识,喜欢这门语言也热爱这门语言.未来想从事前端方面的工作,提前把自己的知识梳理一下.前面写了些 ...

  10. Jenkins + robot framework + git持续集成

    安装略过... 一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Git Client Plugin.GIT plugin.GitHub API Plugin.GitHub p ...