T4 反射实体模型生成代码(Demo)

1.新建一个T4 Script

<#@ template language="C#" debug="True" #>
<#@ output extension="cs" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="$(SolutionDir)Demo.Tools\bin\Debug\Demo.Tools.dll" #>
<#@ import namespace="System.IO" #>
<#@ Import Namespace="System.Linq" #>
<#@ Import Namespace="System.Text" #>
<#@ import namespace="System.Reflection" #>
<#@ Import Namespace="System.Collections.Generic" #>
<#@ Import Namespace="Demo.Tools" #>
<#@ include file="T4Toolbox.tt" #>
<#@ include file="EntityTemplate.tt" #>
<#
    //脚本运行路径
    string currentPath = Path.GetDirectoryName(Host.TemplateFile);
    //解决方案路径
    string solutionPath = currentPath.Substring(0, currentPath.IndexOf(@"\Demo.T4Generator\T4"));
    //输入文件路径
    string outputPath = Path.Combine(solutionPath, @"MvcApplication1\Models");
    //输出项目路径
    string targetProject = Path.Combine(solutionPath, @"MvcApplication1\MvcApplication1.csproj");
    //包含实体定义的DLL所在位置
    string modelFile= Path.Combine(solutionPath, @"Demo.Entitys\bin\Debug\Demo.Entitys.dll");
    //加载实体程序集
    byte[] fileData= File.ReadAllBytes(modelFile);
    Assembly assembly = Assembly.Load(fileData);
    //反射出所有继承了Entity的实体类
    IEnumerable<Type> modelTypes = assembly.GetTypes().Where(m => typeof(Demo.Tools.Entity).IsAssignableFrom(m) && !m.IsAbstract);
    foreach(Type modelType in modelTypes)
    {
        T4ModelInfo model = new T4ModelInfo(modelType);
        //实体模板
        EntityConfigurationTemplate config = new EntityConfigurationTemplate(model);
        //输出的文件编码
        config.Output.Encoding = Encoding.UTF8;
        //定制输出项目
        config.Output.Project  = targetProject;
        //输出生成的文件
        config.RenderToFile(Path.Combine(outputPath, config.FileName));
    }
#>

 

2、新建T4 Template,这里是具体的模板

<#+
public class EntityConfigurationTemplate : CSharpTemplate
{
    private T4ModelInfo _model;
        
    public EntityConfigurationTemplate(T4ModelInfo model)
    {
        _model = model;
    }

    /// <summary>
    /// 获取 生成的文件名,根据模型名定义
    /// </summary>
    public string FileName
    {
        get
        { 
            return string.Format("{0}.generated.cs", _model.Name);
        }
    }

    public override string TransformText()
    {
#>
//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//
// <copyright file="<#= _model.Name #>.generated.cs">
//        生成时间:<#= DateTime.Now.ToString("yyyy-MM-dd HH:mm") #>
// </copyright>
//------------------------------------------------------------------------------

using System;
using System.Data;
using Demo.Entitys;

namespace MvcApplication1.Models
{
    /// <summary>
    /// <#= _model.Description #>
    /// </summary>    
    internal partial class <#= _model.Name #>
    {
        /// <summary>
        /// <#= _model.Description #>
        /// </summary>
        public <#= _model.Name #>()
        {
            <#= _model.Name #>();
        }
       
    }
}
<#+
        return this.GenerationEnvironment.ToString();
    }
}
#>

 

 

PS:以上模板扒自郭明锋的GMF框架

转载于:https://www.cnblogs.com/blackice/p/5531873.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NFine 是基于 C# 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展,让Web开发更迅速、简单。能解决60%重复工作。为您节约更多时间,去陪恋人、家人和朋友。轻松开发,专注您的业务,从NFine开始。 简介: NFine是一套基于 ASP.NET MVC+EF6+Bootstrap 开发出来的框架,源代码完全开源,可以帮助你解决C#以及.NET 项目68%的重复工作,让开发人员远离加班。 使用 Apache License 2.0 协议,采用主流框架,容易上手,简单易学,学习成本低。可完全实现二次开发、基本满足80%项目需求。 可以帮助解决 .NET 项目70%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。 支持 SQLServer、MySQL、Oracle、SQLite、Access 等多数据库类型。模块化设计,层次结构清晰。内置一系列企业信息管理的基础功能。 操作权限控制精密细致,对所有管理链接都进行权限验证,可控制到导航菜单、功能按钮。 数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段 提高开发效率及质量。常用类封装,日志、缓存、验证、字典、文件、邮件、,Excel。等等,目前兼容浏览器(IE8+、Chrome、Firefox、360浏览器等) 适用范围:可以开发 OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、物流管理系统、快递管理系统、教务管理系统等各类管理软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值