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)+"")]");
    }

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

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

原文地址:https://www.cnblogs.com/njcxwz/p/5864858.html