NFine框架的T4模板讲解.docx
《NFine框架的T4模板讲解.docx》由会员分享,可在线阅读,更多相关《NFine框架的T4模板讲解.docx(25页珍藏版)》请在冰豆网上搜索。
NFine框架的T4模板讲解
NFine框架的T4模板
阅读目录
1.前言
2.NFine.Domain.Entity
3.NFine.Domain.IRepository
4.NFine.Repository
5.NFine.Mapping
6.NFine.Application
7.DbHelper.ttinclude
8.ModelAuto.ttinclude
模板在此下载。
回到顶部
1.前言
前段时间在网上看到一个开源框架很好的。
开源:
ASP.NETMVC+EF6+Bootstrap开发框架,写代码就是比较比较麻烦,分层比较多,对于我这种偷懒的人就想到了写一个T4模板。
不了解框架的可以先去看一下这个开源的框架。
一起有5个层,也就是意味着每次数据库添加一张表,就需要写这5个类。
回到顶部
2.NFine.Domain.Entity
复制代码
<#@templatedebug="false"hostspecific="false"language="C#"#>
<#@outputextension=".cs"#>
<#@assemblyname="System.Core.dll"#>
<#@assemblyname="System.Data.dll"#>
<#@assemblyname="System.Data.DataSetExtensions.dll"#>
<#@assemblyname="System.Xml.dll"#>
<#@importnamespace="System"#>
<#@importnamespace="System.Xml"#>
<#@importnamespace="System.Linq"#>
<#@importnamespace="System.Data"#>
<#@importnamespace="System.Data.SqlClient"#>
<#@importnamespace="System.Collections.Generic"#>
<#@importnamespace="System.IO"#>
<#@includefile="$(ProjectDir)DbHelper.ttinclude"#>
//------------------------------------------------------------------------------
//<博客园-枫伶忆
//此代码由T4模板自动生成
//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:
mm:
ss")#>by枫伶忆
//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//QQ:
549387177
//<博客园-枫伶忆
//------------------------------------------------------------------------------
<#
vartableName=config.TableName.Replace("Sys_","")+"Entity";
#>
usingSystem;
namespaceNFine.Domain.Entity.SystemManage
{
///
///<#=tableName#>
///
publicclass<#=tableName#>:
IEntity<<#=tableName#>>,ICreationAudited,IDeleteAudited,IModificationAudited
{
<#foreach(DbColumncolumninDbHelper.GetDbColumns(config.ConnectionString,config.DbDatabase,config.TableName)){#>
public<#=column.CSharpType#><#if(column.CommonType.IsValueType&&column.IsNullable){#>?
<#}#><#=column.ColumnName#>{get;set;}
<#}#>
}
}
复制代码
回到顶部
3.NFine.Domain.IRepository
复制代码
<#@templatedebug="false"hostspecific="false"language="C#"#>
<#@outputextension=".cs"#>
<#@assemblyname="System.Core.dll"#>
<#@assemblyname="System.Data.dll"#>
<#@assemblyname="System.Data.DataSetExtensions.dll"#>
<#@assemblyname="System.Xml.dll"#>
<#@importnamespace="System"#>
<#@importnamespace="System.Xml"#>
<#@importnamespace="System.Linq"#>
<#@importnamespace="System.Data"#>
<#@importnamespace="System.Data.SqlClient"#>
<#@importnamespace="System.Collections.Generic"#>
<#@importnamespace="System.IO"#>
<#@includefile="$(ProjectDir)DbHelper.ttinclude"#>
//------------------------------------------------------------------------------
//<博客园-枫伶忆
//此代码由T4模板自动生成
//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:
mm:
ss")#>by枫伶忆
//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//QQ:
549387177
//<博客园-枫伶忆
//------------------------------------------------------------------------------
<#
vartableName=config.TableName.Replace("Sys_","")+"Repository";
varentity=config.TableName.Replace("Sys_","")+"Entity";
#>
usingNFine.Data;
usingNFine.Domain.Entity.SystemManage;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceNFine.Domain.IRepository.SystemManage
{
///
///<#=tableName#>
///
publicinterfaceI<#=tableName#>:
IRepositoryBase<<#=entity#>>
{
}
}
复制代码
回到顶部
4.NFine.Repository
复制代码
<#@templatedebug="false"hostspecific="false"language="C#"#>
<#@outputextension=".cs"#>
<#@assemblyname="System.Core.dll"#>
<#@assemblyname="System.Data.dll"#>
<#@assemblyname="System.Data.DataSetExtensions.dll"#>
<#@assemblyname="System.Xml.dll"#>
<#@importnamespace="System"#>
<#@importnamespace="System.Xml"#>
<#@importnamespace="System.Linq"#>
<#@importnamespace="System.Data"#>
<#@importnamespace="System.Data.SqlClient"#>
<#@importnamespace="System.Collections.Generic"#>
<#@importnamespace="System.IO"#>
<#@includefile="$(ProjectDir)DbHelper.ttinclude"#>
//------------------------------------------------------------------------------
//<博客园-枫伶忆
//此代码由T4模板自动生成
//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:
mm:
ss")#>by枫伶忆
//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//QQ:
549387177
//<博客园-枫伶忆
//------------------------------------------------------------------------------
<#
vartableName=config.TableName.Replace("Sys_","")+"Repository";
varentity=config.TableName.Replace("Sys_","")+"Entity";
#>
usingNFine.Data;
usingNFine.Domain.Entity.SystemManage;
usingNFine.Domain.IRepository.SystemManage;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceNFine.Repository.SystemManage
{
///
///<#=tableName#>
///
publicclass<#=tableName#>:
RepositoryBase<<#=entity#>>,I<#=tableName#>
{
}
}
复制代码
回到顶部
5.NFine.Mapping
复制代码
<#@templatedebug="false"hostspecific="false"language="C#"#>
<#@outputextension=".cs"#>
<#@assemblyname="System.Core.dll"#>
<#@assemblyname="System.Data.dll"#>
<#@assemblyname="System.Data.DataSetExtensions.dll"#>
<#@assemblyname="System.Xml.dll"#>
<#@importnamespace="System"#>
<#@importnamespace="System.Xml"#>
<#@importnamespace="System.Linq"#>
<#@importnamespace="System.Data"#>
<#@importnamespace="System.Data.SqlClient"#>
<#@importnamespace="System.Collections.Generic"#>
<#@importnamespace="System.IO"#>
<#@includefile="$(ProjectDir)DbHelper.ttinclude"#>
//------------------------------------------------------------------------------
//<博客园-枫伶忆
//此代码由T4模板自动生成
//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:
mm:
ss")#>by枫伶忆
//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//QQ:
549387177
//<博客园-枫伶忆
//------------------------------------------------------------------------------
<#
vardbTableName=config.TableName;
vartableName=config.TableName.Replace("Sys_","")+"Map";
varentity=config.TableName.Replace("Sys_","")+"Entity";
varlist=DbHelper.GetDbColumns(config.ConnectionString,config.DbDatabase,config.TableName);
varpk=DbHelper.GetPrimaryKey(list);
#>
usingNFine.Domain.Entity.SystemManage;
usingSystem.Data.Entity.ModelConfiguration;
namespaceNFine.Mapping.SystemManage
{
///
///<#=tableName#>
///
publicclass<#=tableName#>:
EntityTypeConfiguration<<#=entity#>>
{
public<#=tableName#>()
{
this.ToTable("<#=dbTableName#>");
this.HasKey(t=>t.<#=pk#>);
}
}
}
复制代码
回到顶部
6.NFine.Application
复制代码
<#@templatedebug="false"hostspecific="false"language="C#"#>
<#@outputextension=".cs"#>
<#@assemblyname="System.Core.dll"#>
<#@assemblyname="System.Data.dll"#>
<#@assemblyname="System.Data.DataSetExtensions.dll"#>
<#@assemblyname="System.Xml.dll"#>
<#@importnamespace="System"#>
<#@importnamespace="System.Xml"#>
<#@importnamespace="System.Linq"#>
<#@importnamespace="System.Data"#>
<#@importnamespace="System.Data.SqlClient"#>
<#@importnamespace="System.Collections.Generic"#>
<#@importnamespace="System.IO"#>
<#@includefile="$(ProjectDir)DbHelper.ttinclude"#>
//------------------------------------------------------------------------------
//<博客园-枫伶忆
//此代码由T4模板自动生成
//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:
mm:
ss")#>by枫伶忆
//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//QQ:
549387177
//<博客园-枫伶忆
//------------------------------------------------------------------------------
<#
vartableName=config.TableName.Replace("Sys_","")+"App";
varentity=config.TableName.Replace("Sys_","")+"Entity";
varrepository=config.TableName.Replace("Sys_","")+"Repository";
#>
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingNFine.Domain.Entity.SystemManage;
usingNFine.Domain.IRepository.SystemManage;
usingNFine.Repository.SystemManage;
namespaceNFine.Application.SystemManage
{
///
///<#=tableName#>
///
publicclass<#=tableName#>
{
privateI<#=repository#>service=new<#=repository#>();
publicList<<#=entity#>>GetList()
{
returnservice.IQueryable().ToList();
}
public<#=entity#>GetForm(stringkeyValue)
{
returnservice.FindEntity(keyValue);
}
publicvoidDelete(<#=entity#>entity)
{
service.Delete(entity);
}
publicvoidSubmitForm(<#=entity#>entity,stringkeyValue)
{
if(!
string.IsNullOrEmpty(keyValue))
{
entity.Modify(keyValue);
service.Update(entity);
}
else
{
entity.Create();
service.Insert(entity);
}
}
}
}
复制代码
回到顶部
7.DbHelper.ttinclude
核心的帮助类
复制代码
<#+
publicclassDbHelper
{
#regionGetDbTables
publicstaticListGetDbTables(stringconnectionString,stringdatabase,stringtables=null)
{
if(!
string.IsNullOrEmpty(tables))
{
tables=string.Format("andobj.namein('{0}')",tables.Replace(",","','"));
}
#regionSQL
stringsql=string.Format(@"SELECT
obj.nametablename,
schem.nameschemname,
idx.rows,
CAST
(
CASE
WHEN(SELECTCOUNT
(1)FROMsys.indexesWHEREobject_id=obj.OBJECT_IDANDis_primary_key=1)>=1THEN1
ELSE0
END
ASBIT)HasPrimaryKey
from{0}.sys.objectsobj
innerjoin{0}.dbo.sysindexesidxonobj.object_id=idx.idandidx.indid<=1
INNERJOIN{0}.sys.schemasschemONobj.schema_id=schem.schema_id
wheretype='U'{1}
orderbyobj.name",database,tables);
#endregion
DataTabledt=GetDataTable(connectionString,sql);
retur