zoukankan      html  css  js  c++  java
  • Ef+T4模板实现代码快速生成器

    转载请注明地址:http://www.cnblogs.com/cainiaodage/p/4953601.html 

    效果如图,demo(点击demo可下载案例)

     

    项目结构如图

    T4BLL添加BLL.tt文件;

    T4Model添加Model文件;

    T4DAL添加DAL.tt文件;

    T4DAL 添加ADO.NET Entity Data Model选择dababase first 模式;


    打开Model1.edmx文件下的Model1.tt打开,复制内容替换了T4Model项目下Model.tt文件;

    打开Model1.edmx文件下的Model.tt从<#=codeStringGenerator.EntityClassOpening(entity)#>{ 开始选择至 }<# EndNamespace(code); 删除

    如下图

    复制Model1.tt内容替换BLL.tt、DAL.tt内容,现在Model1.tt已经没有什么意义了,可以删除。


    打开T4Model的T4模板,修改如下代码,修改完成后保存下就可以生成出Edmx中添加类的Model。

    const string inputFile = @"Model1.edmx";
    //更改为
    string inputFile = Host.ResolveAssemblyReference("$(ProjectDir)").Replace("T4Model","T4DAL")+"/Model1.edmx"; 

    打开T4DAL的T4模板

    fileManager.StartNewFile(entity.Name + ".cs");
    //更改为
    fileManager.StartNewFile(entity.Name + "_DAL.cs");
    //---分割线---
     public string EntityClassOpening(EntityType entity)
        {
            return string.Format(
                CultureInfo.InvariantCulture,
                "{0} {1}partial class {2}{3}",
                Accessibility.ForType(entity),
                _code.SpaceAfter(_code.AbstractOption(entity)),
                _code.Escape(entity),
                _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
        }
    //更改为
     public string EntityClassOpening(EntityType entity)
        {
            return string.Format(
                CultureInfo.InvariantCulture,
                "{0} {1}partial class {2}_DAL{3}",
                Accessibility.ForType(entity),
                _code.SpaceAfter(_code.AbstractOption(entity)),
                _code.Escape(entity),
                _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
        }
    //---分割线---更改为
    foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
    {
        fileManager.StartNewFile(entity.Name + "_DAL.cs");
        BeginNamespace(code);
    #>
    
    using T4Model;
    <#=codeStringGenerator.UsingDirectives(inHeader: false)#>
    <#=codeStringGenerator.EntityClassOpening(entity)#>
    {
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public <#= entity.Name #> Add(<#= entity.Name #> entity){
            //内容实现
            return null;
        }
    
    }
    <#
        EndNamespace(code);
    }

    打开T4BLL的T4模板

    const string inputFile = @"Model1.edmx";
    //更改为
    string inputFile = Host.ResolveAssemblyReference("$(ProjectDir)").Replace("T4BLL","T4DAL")+"/Model1.edmx"; 
    //---分割线---
    fileManager.StartNewFile(entity.Name + ".cs");
    //更改为
    fileManager.StartNewFile(entity.Name + "_BLL.cs");
    //---分割线---
     public string EntityClassOpening(EntityType entity)
        {
            return string.Format(
                CultureInfo.InvariantCulture,
                "{0} {1}partial class {2}{3}",
                Accessibility.ForType(entity),
                _code.SpaceAfter(_code.AbstractOption(entity)),
                _code.Escape(entity),
                _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
        }
    //更改为
     public string EntityClassOpening(EntityType entity)
        {
            return string.Format(
                CultureInfo.InvariantCulture,
                "{0} {1}partial class {2}_BLL{3}",
                Accessibility.ForType(entity),
                _code.SpaceAfter(_code.AbstractOption(entity)),
                _code.Escape(entity),
                _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
        }
    //---分割线---更为
    foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
    {
        fileManager.StartNewFile(entity.Name + "_BLL.cs");
        BeginNamespace(code);
    #>
    using T4DAL;
    using T4Model;
    <#=codeStringGenerator.UsingDirectives(inHeader: false)#>
    <#=codeStringGenerator.EntityClassOpening(entity)#>
    {
        <#= entity.Name #>_DAL dal = new <#= entity.Name #>_DAL();
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public <#= entity.Name #> Add(<#= entity.Name #> entity){
            return dal.Add(entity);
        }
    }
    <#
        EndNamespace(code);
    }

    Host.ResolveAssemblyReference("$(ProjectDir)")是获取项目路径的方法,通过替换项目名称来寻找到edmx文件,从而实现T4模板分离在不同的类库中。

  • 相关阅读:
    【流量劫持】SSLStrip 终极版 —— location 瞒天过海
    【流量劫持】沉默中的狂怒 —— Cookie 大喷发
    【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
    Web 前端攻防(2014版)
    流量劫持 —— 浮层登录框的隐患
    流量劫持能有多大危害?
    流量劫持是如何产生的?
    XSS 前端防火墙 —— 整装待发
    XSS 前端防火墙 —— 天衣无缝的防护
    XSS 前端防火墙 —— 无懈可击的钩子
  • 原文地址:https://www.cnblogs.com/cainiaodage/p/4953601.html
Copyright © 2011-2022 走看看