配色: 字号:
NFine框架的T4模板
2016-10-10 | 阅:  转:  |  分享 
  
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"#>



//------------------------------------------------------------------------------

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//此代码由T4模板自动生成

//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss")#>by枫伶忆

//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。

//QQ:549387177

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//------------------------------------------------------------------------------

<#

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"#>

//------------------------------------------------------------------------------

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//此代码由T4模板自动生成

//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss")#>by枫伶忆

//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。

//QQ:549387177

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//------------------------------------------------------------------------------

<#

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"#>

//------------------------------------------------------------------------------

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//此代码由T4模板自动生成

//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss")#>by枫伶忆

//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。

//QQ:549387177

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//------------------------------------------------------------------------------

<#

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"#>

//------------------------------------------------------------------------------

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//此代码由T4模板自动生成

//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss")#>by枫伶忆

//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。

//QQ:549387177

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//------------------------------------------------------------------------------

<#

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"#>

//------------------------------------------------------------------------------

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//此代码由T4模板自动生成

//生成时间<#=DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss")#>by枫伶忆

//对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。

//QQ:549387177

//<博客园-枫伶忆http://www.cnblogs.com/fenglingyi/>

//------------------------------------------------------------------------------

<#

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);

returndt.Rows.Cast().Select(row=>newDbTable

{

TableName=row.Field("tablename"),

SchemaName=row.Field("schemname"),

Rows=row.Field("rows"),

HasPrimaryKey=row.Field("HasPrimaryKey")

}).ToList();

}

#endregion



#regionGetDbColumns



publicstaticListGetDbColumns(stringconnectionString,stringdatabase,stringtableName,stringschema="dbo")

{

#regionSQL

stringsql=string.Format(@"

WITHindexCTEAS

(

SELECT

ic.column_id,

ic.index_column_id,

ic.object_id

FROM{0}.sys.indexesidx

INNERJOIN{0}.sys.index_columnsicONidx.index_id=ic.index_idANDidx.object_id=ic.object_id

WHEREidx.object_id=OBJECT_ID(@tableName)ANDidx.is_primary_key=1

)

select

colm.column_idColumnID,

CAST(CASEWHENindexCTE.column_idISNULLTHEN0ELSE1ENDASBIT)IsPrimaryKey,

colm.nameColumnName,

systype.nameColumnType,

colm.is_identityIsIdentity,

colm.is_nullableIsNullable,

cast(colm.max_lengthasint)ByteLength,

(

case

whensystype.name=''nvarchar''andcolm.max_length>0thencolm.max_length/2

whensystype.name=''nchar''andcolm.max_length>0thencolm.max_length/2

whensystype.name=''ntext''andcolm.max_length>0thencolm.max_length/2

elsecolm.max_length

end

)CharLength,

cast(colm.precisionasint)Precision,

cast(colm.scaleasint)Scale,

prop.valueRemark

from{0}.sys.columnscolm

innerjoin{0}.sys.typessystypeoncolm.system_type_id=systype.system_type_idandcolm.user_type_id=systype.user_type_id

leftjoin{0}.sys.extended_propertiesproponcolm.object_id=prop.major_idandcolm.column_id=prop.minor_id

LEFTJOINindexCTEONcolm.column_id=indexCTE.column_idANDcolm.object_id=indexCTE.object_id

wherecolm.object_id=OBJECT_ID(@tableName)

orderbycolm.column_id",database);

#endregion

SqlParameterparam=newSqlParameter("@tableName",SqlDbType.NVarChar,100){Value=string.Format("{0}.{1}.{2}",database,schema,tableName)};

DataTabledt=GetDataTablewww.baiyuewang.net(connectionString,sql,param);

returndt.Rows.Cast().Select(row=>newDbColumn()

{

ColumnID=row.Field("ColumnID"),

IsPrimaryKey=row.Field("IsPrimaryKey"),

ColumnName=row.Field("ColumnName"),

ColumnType=row.Field("ColumnType"),

IsIdentity=row.Field("IsIdentity"),

IsNullable=row.Field("IsNullable"),

ByteLength=row.Field("ByteLength"),

CharLength=row.Field("CharLength"),

Scale=row.Field("Scale"),

Remark=row["Remark"].ToString()

}).ToList();

}



#endregion



#regionGetDataTable



publicstaticDataTableGetDataTable(stringconnectionString,stringcommandText,paramsSqlParameter[]parms)

{

using(SqlConnectionconnection=newSqlConnection(connectionString))

{

SqlCommandcommand=connection.CreateCommand();

command.CommandText=commandText;

command.Parameters.AddRange(parms);

SqlDataAdapteradapter=newSqlDataAdapter(command);



DataTabledt=newDataTable();

adapter.Fill(dt);



returndt;

}

}



#endregion



#regionGetPrimaryKey

publicstaticstringGetPrimaryKey(ListdbColumns)

{

stringprimaryKey=string.Empty;

if(dbColumns!=null&&dbColumns.Count>0)

{

foreach(varitemindbColumns)

{

if(item.IsPrimaryKey==true)

{

primaryKey=item.ColumnName;

}

}

}

returnprimaryKey;

}

#endregion

}



#regionDbTable

///

///表结构

///


publicsealedclassDbTable

{

///

///表名称

///


publicstringTableName{get;set;}

///

///表的架构

///


publicstringSchemaName{get;set;}

///

///表的记录数

///


publicintRows{get;set;}



///

///是否含有主键

///


publicboolHasPrimaryKey{get;set;}

}

#endregion



#regionDbColumn

///

///表字段结构

///


publicsealedclassDbColumn

{

///

///字段ID

///


publicintColumnID{get;set;}



///

///是否主键

///


publicboolIsPrimaryKey{get;set;}



///

///字段名称

///


publicstringColumnName{get;set;}



///

///字段类型

///


publicstringColumnType{get;set;}



///

///数据库类型对应的C#类型

///


publicstringCSharpType

{

get

{

returnSqlServerDbTypeMap.MapCsharpType(ColumnType);

}

}



///

///

///


publicTypeCommonType

{

get

{

returnSqlServerDbTypeMap.MapCommonType(ColumnType);

}

}



///

///字节长度

///


publicintByteLength{get;set;}



///

///字符长度

///


publicintCharLength{get;set;}



///

///小数位

///


publicintScale{get;set;}



///

///是否自增列

///


publicboolIsIdentity{get;set;}



///

///是否允许空

///


publicboolIsNullable{get;set;}



///

///描述

///


publicstringRemark{get;set;}

}

#endregion



#regionSqlServerDbTypeMap



publicclassSqlServerDbTypeMap

{

publicstaticstringMapCsharpType(stringdbtype)

{

if(string.IsNullOrEmpty(dbtype))returndbtype;

dbtype=dbtype.ToLower();

stringcsharpType="object";

switch(dbtype)

{

case"bigint":csharpType="long";break;

case"binary":csharpType="byte[]";break;

case"bit":csharpType="bool";break;

case"char":csharpType="string";break;

case"date":csharpType="DateTime";break;

case"datetime":csharpType="DateTime";break;

case"datetime2":csharpType="DateTime";break;

case"datetimeoffset":csharpType="DateTimeOffset";break;

case"decimal":csharpType="decimal";break;

case"float":csharpType="double";break;

case"image":csharpType="byte[]";break;

case"int":csharpType="int";break;

case"money":csharpType="decimal";break;

case"nchar":csharpType="string";break;

case"ntext":csharpType="string";break;

case"numeric":csharpType="decimal";break;

case"nvarchar":csharpType="string";break;

case"real":csharpType="Single";break;

case"smalldatetime":csharpType="DateTime";break;

case"smallint":csharpType="short";break;

case"smallmoney":csharpType="decimal";break;

case"sql_variant":csharpType="object";break;

case"sysname":csharpType="object";break;

case"text":csharpType="string";break;

case"time":csharpType="TimeSpan";break;

case"timestamp":csharpType="byte[]";break;

case"tinyint":csharpType="byte";break;

case"uniqueidentifier":csharpType="Guid";break;

case"varbinary":csharpType="byte[]";break;

case"varchar":csharpType="string";break;

case"xml":csharpType="string";break;

default:csharpType="object";break;

}

returncsharpType;

}



publicstaticTypeMapCommonType(stringdbtype)

{

if(string.IsNullOrEmpty(dbtype))returnType.Missing.GetType();

dbtype=dbtype.ToLower();

TypecommonType=typeof(object);

switch(dbtype)

{

case"bigint":commonType=typeof(long);break;

case"binary":commonType=typeof(byte[]);break;

case"bit":commonType=typeof(bool);break;

case"char":commonType=typeof(string);break;

case"date":commonType=typeof(DateTime);break;

case"datetime":commonType=typeof(DateTime);break;

case"datetime2":commonType=typeof(DateTime);break;

case"datetimeoffset":commonType=typeof(DateTimeOffset);break;

case"decimal":commonType=typeof(decimal);break;

case"float":commonType=typeof(double);break;

case"image":commonType=typeof(byte[]);break;

case"int":commonType=typeof(int);break;

case"money":commonType=typeof(decimal);break;

case"nchar":commonType=typeof(string);break;

case"ntext":commonType=typeof(string);break;

case"numeric":commonType=typeof(decimal);break;

case"nvarchar":commonType=typeof(string);break;

case"real":commonType=typeof(Single);break;

case"smalldatetime":commonType=typeof(DateTime);break;

case"smallint":commonType=typeof(short);break;

case"smallmoney":commonType=typeof(decimal);break;

case"sql_variant":commonType=typeof(object);break;

case"sysname":commonType=typeof(object);break;

case"text"www.wang027.com:commonType=typeof(string);break;

case"time":commonType=typeof(TimeSpan);break;

case"timestamp":commonType=typeof(byte[]);break;

case"tinyint":commonType=typeof(byte);break;

case"uniqueidentifier":commonType=typeof(Guid);break;

case"varbinary":commonType=typeof(byte[]);break;

case"varchar":commonType=typeof(string);break;

case"xml":commonType=typeof(string);break;

default:commonType=typeof(object);break;

}

returncommonType;

}

}

#endregion

#>



<#+

publicclassconfig

{

publicstaticreadonlystringConnectionString="DataSource=(local);InitialCatalog=NFineBase;UserID=sa;Password=hjf19870810;";

publicstaticreadonlystringDbDatabase="NFineBase";

publicstaticreadonlystringTableName="Sys_Test";

}

#>

献花(0)
+1
(本文系thedust79首藏)