首页 > 代码库 > EF生成实体模板改良

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生成实体模板改良