• 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模板和解决上面的两个问题,请留言,与大家一起分享

  • 相关阅读:
    我告诉你 电脑软件工具
    mysql 查询当天、本周,本月,上一个月的数据
    springboot:springboot+mybatis多数据源最简解决方案
    MySQL数据库优化的(经典必看)
    MyBatis 的强大特性之一便是它的动态 SQL之常用属性使用
    你知道Spring 中使用了哪些设计模式?
    kafka 相关面试问题
    掌握TCP/IP的通信原理(三次握手、四次挥手)。
    jsp和servlet实现文件的上传和下载
    Java获取数据库记录通过javabean映射,并存入list集合
  • 原文地址:https://www.cnblogs.com/q4486233/p/4045936.html
Copyright © 2020-2023  润新知