【T4】T4模板 文本模板使用 获取实体数据模型快速生成代码

文本模板作用就是生成代码

我们可以用于批量生成代码

 

新建文本模板

我们可以参考实体数据模型下的T4模板

现在要生成以下代码,现在有多个实体模型,用T4模板可以一次性生成所有代码

using Wang.OA.Model;

namespace Wang.OA.IDAL
{
    public  interface IUserInfoDal : IBaseDal<UserInfo>
    {
    }
}

从实体数据模型中获取全部模型生成全部代码

生成IDal的模板

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ 
 output extension=".cs"#>
<#
const string inputFile = @"..\\Wang.OA.Model\\DataModel.edmx";

var code = new CodeGenerationTools(this);
var loader = new MetadataLoader(this);
var region = new CodeRegion(this,1);
var ef = new MetadataTools(this);

var ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();

var	fileManager = EntityFrameworkTemplateFileManager.Create(this);

#>
using Wang.OA.Model;

namespace Wang.OA.IDAL
{
<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
    public interface I<#=entity.Name#>Dal : IBaseDal<<#=entity.Name#>>
    {
    }
<#}#>
}

其中,inputFile是实体数据模型的路径

18行以上的代码都是统一模板,获取实体模型,后面只需改18行以后的代码生成不同的模板Dal,Services

生成的代码

using Wang.OA.Model;

namespace Wang.OA.IDAL
{
    public interface IOrderInfoDal : IBaseDal<OrderInfo>
    {
    }
    public interface IUserInfoDal : IBaseDal<UserInfo>
    {
    }
}

生成IDbSession的模板

namespace Wang.OA.IDAL
{
    public interface IDbSession
    {
<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
		I<#=entity.Name#>Dal <#=entity.Name#>Dal { get; }
<#}#>
		int SaveChanges(); 
	} 
}

生成Dal的模板

using Wang.OA.IDAL;
using Wang.OA.Model;

namespace Wang.OA.EFDAL
{
<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
    public class <#=entity.Name#>Dal : BaseDal<<#=entity.Name#>>, I<#=entity.Name#>Dal
    {
    }
<#}#>
}

生成DalFactory的模板

using System.Reflection;
using Wang.OA.IDAL;

namespace Wang.OA.DALFactory
{
	public class DalFactory
    {
		static string assemlyName = System.Configuration.ConfigurationManager.AppSettings["DalAssemlyName"];
<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
		public static I<#=entity.Name#>Dal Get<#=entity.Name#>Dal()
        {
            return Assembly.Load(assemlyName).CreateInstance(assemlyName + ".<#=entity.Name#>Dal") as I<#=entity.Name#>Dal;
        }
<#}#>
	} 
}

生成DbSession的模板

using Wang.OA.EFDAL;
using Wang.OA.IDAL;

namespace Wang.OA.DALFactory
{
	public class DbSession : IDbSession
    {
<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
		public I<#=entity.Name#>Dal <#=entity.Name#>Dal
		{ 
			get { return DalFactory.Get<#=entity.Name#>Dal(); }
		}
<#}#>
		public int SaveChanges()
		{
			return DbContextFactory.GetCurrentDbContext().SaveChanges();
		}
	} 
}

生成IService的模板

using Wang.OA.Model;

namespace Wang.OA.IBLL
{
<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
    public interface I<#=entity.Name#>Service : IBaseService<<#=entity.Name#>>
    {
    }
<#}#>
}

生成Service的模板

using Wang.OA.IBLL;
using Wang.OA.Model;

namespace Wang.OA.BLL
{
<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
    public class <#=entity.Name#>Service : BaseService<<#=entity.Name#>>, I<#=entity.Name#>Service
    {
    }
<#}#>
}

 

 

生成xml配置文件,首先要将生成文件的扩展名改为xml

extension=".xml"

生成Dal配置的xml代码

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" default-autowire="constructor">
  <object name="DbSession" type="Wang.OA.DALFactory.DbSessionFactory, Wang.OA.DALFactory" singleton="false"
          factory-method="GetCurrentDbSession"/>

<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
   <object name="<#=entity.Name#>Dal" type="Wang.OA.EFDAL.<#=entity.Name#>Dal, Wang.OA.EFDAL" singleton="false"/>
<#}#>

</objects> 

生成Service配置的xml代码

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" default-autowire="constructor">

<#
foreach (var entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name))
{
#>
	<object name="<#=entity.Name#>Service" type="Wang.OA.BLL.<#=entity.Name#>Service, Wang.OA.BLL" singleton="false">
		<property name="DbSession" ref="DbSession"></property>
		<property name="CurrentDal" ref="<#=entity.Name#>Dal"></property>
  </object>
<#}#>

</objects> 

 

写好模板,生成--转换所有T4模板

一次性生成代码

 

相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页