EF生成实体模板改良

Posted 尘嚣之上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF生成实体模板改良相关的知识,希望对你有一定的参考价值。

也许介绍的方法并不是完美的解决方法

web工程里添加这两项

技术分享

里面会生成两个模板文件 上下文模板和实体类模板,现在主要对实体类模板进行改良

1.讲using 放在文件头

<#=codeStringGenerator.UsingDirectives(inHeader: true)#>  false改为true

添加

public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFileManager fileManager)
{
    fileManager.StartHeader();
#>
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
<#=codeStringGenerator.UsingDirectives(inHeader: true)#>
<#+
    fileManager.EndBlock();
}

2.去partial

搜索partial替换为空

3.改命名空间

namespace <#=code.EscapeNamespace(codeNamespace)#> 将这句直接替换成自己的命名空间

4.改可空类型的写法 我们更习惯与int?的这种风格 比较简单就不介绍了

5.添加主键Key特性

这里面将ID统一命名为主键了所以采用了这个比对的效果,如果主键列不固定名称,可以在class最上面添加,也是可以的,不做介绍了

  public string Property(EdmProperty edmProperty)
    {
      if(_code.Escape(edmProperty)=="ID")
      {
      return   string.Format(
            CultureInfo.InvariantCulture,
            @"{5}
    {6}
    {0} {1} {2} {{ {3}get; {4}set; }}",
            Accessibility.ForProperty(edmProperty),
            _typeMapper.GetTypeName(edmProperty.TypeUsage),
            _code.Escape(edmProperty),
            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)),"[Key]","[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]");
      }
      else
      {
        return string.Format(
            CultureInfo.InvariantCulture,
            "{0} {1} {2} {{ {3}get; {4}set; }}",
            Accessibility.ForProperty(edmProperty),
            _typeMapper.GetTypeName(edmProperty.TypeUsage),
            _code.Escape(edmProperty),
            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
      }
    }

6.添加Table特性

  public string EntityClassOpening(EntityType entity)
    {
        return string.Format(
            CultureInfo.InvariantCulture,
            @"{4}
{0} {1}class {2}{3}",
            Accessibility.ForType(entity),
            _code.SpaceAfter(_code.AbstractOption(entity)),
            _code.Escape(entity),
            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)),
             "[Table(\""+_code.Escape(entity)+"\")]");
    }

最后生成的实体如果格式不对其,可以快捷键设为对齐

另外本人对模板并没有深入的研究,这些改良虽然满足了暂时的生成需求,但是也许方法并不正宗,仅此说明

 

以上是关于EF生成实体模板改良的主要内容,如果未能解决你的问题,请参考以下文章

使用T4模板为EF框架添加实体根据数据库自动生成字段注释的功能

无需任何配置即可生成实体代码的 T4 模板

EF 开始的片段时有问题 具有潜在运行时冲突

EF添加关联的提示问题:映射从第 260 行开始的片段时有问题:

使用T4模板为EF框架添加数据库实体注释

使用 EF4 的 POCO 模板时“找不到元数据信息”?