zoukankan      html  css  js  c++  java
  • 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)+"")]");
        }

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

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

  • 相关阅读:
    public,protected,private辨析
    转载---Java集合对象的深度复制与普通复制
    SSM框架学习之高并发秒杀业务--笔记4-- web层
    PCB布线总的原则
    模拟电子技术目录
    放大器(PA+LAN)在射频上的应用
    AD软件Bug和自我失误的对战
    二、cadence焊盘与封装制作操作步骤详细说明
    图腾柱电路工作原理
    转载:介绍AD另外一种奇葩的多通道复用的方法
  • 原文地址:https://www.cnblogs.com/njcxwz/p/5864858.html
Copyright © 2011-2022 走看看