您的位置:首页 > 产品设计 > UI/UE

FluentData,它是一个轻量级框架,关注性能和易用性。

2015-09-05 16:19 357 查看
http://www.cnblogs.com/zengxiangzhan/p/3250105.html

FluentData,它是一个轻量级框架,关注性能和易用性。

下载地址:FlunenData.Model

利用T4模板,【MultipleOutputHelper.ttinclude】批量生成多文件

基本语法:

1.初始化:获取MultipleOutputHelper.ttinclude文件模板在T4模板导入

//导入MultipleOutputHelper.ttinclude文件路径
<#@includefile="$(SolutionDir)\ORM.Model\T4\MultipleOutputHelper.ttinclude"#>

//初始化Manager对象
varmanager=Manager.Create(Host,GenerationEnvironment);

2.文件块:使用代码标识区分生成的代码块的范围
manager.StartNewFile(tb_name+".cs");
//代码块
manager.EndBlock();

3.编译执行:使用Process方法,进行文件分割

manager.Process(true);


实践:





1.批量生成实体类

<#@templatedebug="false"hostspecific="true"language="C#"#>
<#@assemblyname="System.Data"#>
<#@assemblyname="System.xml"#>
<#@importnamespace="System.Collections.Generic"#>
<#@importnamespace="System.Data.SqlClient"#>
<#@importnamespace="System.Data"#>
<#@assemblyname="System.Core"#>
<#@importnamespace="System.Linq"#>

//导入MultipleOutputHelper.ttinclude文件
<#@includefile="$(SolutionDir)\My.Model\T4\MultipleOutputHelper.ttinclude"#>

<#
stringconnectionString="server=qq;database=db;uid=sa;pwd=sa;";
SqlConnectionconn=newSqlConnection(connectionString);
conn.Open();

stringselectQuery="SETFMTONLYON;select*from@tableName;SETFMTONLYOFF;";
SqlCommandcommand=newSqlCommand(selectQuery,conn);
SqlDataAdapterad=newSqlDataAdapter(command);
System.Data.DataSetds=newDataSet();

varmanager=Manager.Create(Host,GenerationEnvironment);

System.Data.DataTableschema=conn.GetSchema("Tables");
foreach(System.Data.DataRowrowinschema.Rows)
{
ds.Tables.Clear();
stringtb_name=row["TABLE_NAME"].ToString();
command.CommandText=selectQuery.Replace("@tableName",row["TABLE_NAME"].ToString());
ad.FillSchema(ds,SchemaType.Mapped,tb_name);
manager.StartNewFile(tb_name+".cs");#>

usingFluentData;
usingSystem;
usingSystem.Collections.Generic;
namespaceMy.Model
{
///<summary>
///实体-<#=tb_name#>
///</summary>
publicpartialclass<#=tb_name#>
{
<#
PushIndent("");
foreach(DataColumndcinds.Tables[0].Columns)
{
WriteLine("public"+dc.DataType.Name+(dc.AllowDBNull&&dc.DataType.Name.ToLower()!="string"?"?":"")+dc.ColumnName+"{get;set;}");
}
PopIndent();
#>
}
}

<#
manager.EndBlock();
}
conn.Close();
manager.Process(true);
#>


2.批量生成基础业务逻辑

<#@templatedebug="false"hostspecific="true"language="C#"#>
<#@assemblyname="System.Data"#>
<#@assemblyname="System.xml"#>
<#@importnamespace="System.Collections.Generic"#>
<#@importnamespace="System.Data.SqlClient"#>
<#@importnamespace="System.Data"#>
<#@assemblyname="System.Core"#>
<#@importnamespace="System.Linq"#>

//导入MultipleOutputHelper.ttinclude文件
<#@includefile="$(SolutionDir)\MY.Model\T4\MultipleOutputHelper.ttinclude"#>

<#
stringconnectionString="server=QQ;database=DB;uid=sa;pwd=sa;";
SqlConnectionconn=newSqlConnection(connectionString);
conn.Open();

stringselectQuery="SETFMTONLYON;select*from@tableName;SETFMTONLYOFF;";
SqlCommandcommand=newSqlCommand(selectQuery,conn);
SqlDataAdapterad=newSqlDataAdapter(command);
System.Data.DataSetds=newDataSet();

varmanager=Manager.Create(Host,GenerationEnvironment);

System.Data.DataTableschema=conn.GetSchema("Tables");
foreach(System.Data.DataRowrowinschema.Rows)
{
ds.Tables.Clear();
stringtb_name=row["TABLE_NAME"].ToString();
command.CommandText=selectQuery.Replace("@tableName",row["TABLE_NAME"].ToString());
ad.FillSchema(ds,SchemaType.Mapped,tb_name);
manager.StartNewFile(tb_name+"Action.cs");#>

usingSystem;
usingSystem.Collections.Generic;
usingMY.Model;
usingFluentData;
namespaceMY.BLL
{

///<summary>
///<#=tb_name#>操作类
///</summary>
publicpartialclass<#=tb_name#>Action
{<#
stringfkQuery="SELECTf.nameASForeignKey,";
fkQuery+="OBJECT_NAME(f.parent_object_id)ASTableName,";
fkQuery+="COL_NAME(fc.parent_object_id,fc.parent_column_id)ASColumnName,";
fkQuery+="OBJECT_NAME(f.referenced_object_id)ASReferenceTableName,";
fkQuery+="COL_NAME(fc.referenced_object_id,fc.referenced_column_id)ASReferenceColumnName";
fkQuery+="FROM";
fkQuery+="sys.foreign_keysASf";
fkQuery+="INNERJOINsys.foreign_key_columnsASfcONf.OBJECT_ID=fc.constraint_object_id";
fkQuery+="whereOBJECT_NAME(f.parent_object_id)='"+tb_name+"'";

List<string>fkColumnNames=newList<string>();
Dictionary<string,string>parentTables=newDictionary<string,string>();

SqlCommandcommand2=newSqlCommand(fkQuery,conn);
using(vardr=command2.ExecuteReader())
{
while(dr.Read())
{
fkColumnNames.Add(dr["ColumnName"].ToString());
parentTables.Add(dr["ColumnName"].ToString(),dr["ReferenceTableName"].ToString());
}
dr.Close();
}

List<DataColumn>fkColumns=newList<DataColumn>();
foreach(stringfkColumnNameinfkColumnNames)
{
foreach(DataColumndcinds.Tables[0].Columns)
{
if(dc.ColumnName==fkColumnName)
fkColumns.Add(dc);
}
}

List<string>primaryKeyParamsWithTypes=newList<string>();
List<string>primaryKeyParams=newList<string>();
List<string>whereItems=newList<string>();
List<string>automapItems=newList<string>();
foreach(DataColumnpkinds.Tables[0].PrimaryKey)
{
primaryKeyParamsWithTypes.Add(string.Format("{0}{1}",pk.DataType.Name,this.ToCamelCase(pk.ColumnName)));
primaryKeyParams.Add(pk.ColumnName);
whereItems.Add(string.Format("{0}=@{1}",pk.ColumnName,pk.ColumnName.ToLower()));
automapItems.Add(string.Format("x.{0}",pk.ColumnName));
}

stringupdateAutomap=string.Empty;
if(automapItems.Count>0){
if(automapItems.Count>1)
updateAutomap="new{"+string.Join(",",automapItems.ToArray())+"}";
else
updateAutomap=automapItems[0];
}
#>

publicstatic<#=tb_name#>Select(<#=string.Join(",",primaryKeyParamsWithTypes.ToArray())#>)
{
using(varcontext=db.Context())
{
returncontext.Sql("SELECT*FROM<#=tb_name#>WHERE<#=string.Join("AND",whereItems.ToArray())#>")
<#foreach(stringpkpinprimaryKeyParams)
{
WriteLine(".Parameter(\""+pkp.ToLower()+"\","+this.ToCamelCase(pkp)+")");
}
#>
.QuerySingle<<#=tb_name#>>();
}
}

publicstaticList<<#=tb_name#>>SelectAll()
{
returnSelectAll(string.Empty);
}

publicstaticList<<#=tb_name#>>SelectAll(stringsortExpression)
{
returnSelectAll(0,0,sortExpression);
}

publicstaticList<<#=tb_name#>>SelectAll(intstartRowIndex,intmaximumRows,stringsortExpression)
{
using(varcontext=db.Context())
{
varselect=context.Select<<#=tb_name#>>("*")
.From("<#=tb_name#>");

if(maximumRows>0)
{
if(startRowIndex==0)
startRowIndex=1;

select.Paging(startRowIndex,maximumRows);
}

if(!string.IsNullOrEmpty(sortExpression))
select.OrderBy(sortExpression);

returnselect.QueryMany();
}
}

publicstaticintCountAll()
{
using(varcontext=db.Context())
{
returncontext.Sql("SELECTCOUNT(*)FROM<#=tb_name#>")
.QuerySingle<int>();
}
}

<#
foreach(DataColumndcinfkColumns)
{
#>

publicstaticList<<#=tb_name#>>SelectBy<#=parentTables[dc.ColumnName]#>(<#=dc.DataType.Name#><#=this.ToCamelCase(dc.ColumnName)#>)
{
returnSelectBy<#=parentTables[dc.ColumnName]#>(<#=this.ToCamelCase(dc.ColumnName)#>,string.Empty);
}

publicstaticList<<#=tb_name#>>SelectBy<#=parentTables[dc.ColumnName]#>(<#=dc.DataType.Name#><#=this.ToCamelCase(dc.ColumnName)#>,stringsortExpression)
{
returnSelectBy<#=parentTables[dc.ColumnName]#>(<#=this.ToCamelCase(dc.ColumnName)#>,0,0,sortExpression);
}

publicstaticList<<#=tb_name#>>SelectBy<#=parentTables[dc.ColumnName]#>(<#=dc.DataType.Name#><#=this.ToCamelCase(dc.ColumnName)#>,intstartRowIndex,intmaximumRows,stringsortExpression)
{
using(varcontext=db.Context())
{
varselect=context.Select<<#=tb_name#>>("*")
.From("<#=tb_name#>")
.Where("<#=dc.ColumnName#>=@<#=dc.ColumnName.ToLower()#>")
.Parameter("<#=dc.ColumnName.ToLower()#>",<#=this.ToCamelCase(dc.ColumnName)#>);

if(maximumRows>0)
{
if(startRowIndex==0)
startRowIndex=1;

select.Paging(startRowIndex,maximumRows);
}

if(!string.IsNullOrEmpty(sortExpression))
select.OrderBy(sortExpression);

returnselect.QueryMany();
}
}

publicstaticintCountBy<#=parentTables[dc.ColumnName]#>(<#=dc.DataType.Name#><#=this.ToCamelCase(dc.ColumnName)#>)
{
using(varcontext=db.Context())
{
returncontext.Sql("SELECTCOUNT(*)FROM<#=tb_name#>WHERE<#=dc.ColumnName#>=@<#=dc.ColumnName.ToLower()#>")
.Parameter("<#=dc.ColumnName.ToLower()#>",<#=this.ToCamelCase(dc.ColumnName)#>)
.QuerySingle<int>();
}
}
<#}#>

<#if(ds.Tables[0].PrimaryKey!=null&&ds.Tables[0].PrimaryKey.Length==1&&ds.Tables[0].PrimaryKey[0].AutoIncrement){#>
publicstaticboolInsert(<#=tb_name#><#=this.ToCamelCase(tb_name)#>)
{
using(varcontext=db.Context())
{
intid=context.Insert<<#=tb_name#>>("<#=tb_name#>",<#=this.ToCamelCase(tb_name)#>)
.AutoMap(x=>x.<#=primaryKeyParams[0]#>)
.ExecuteReturnLastId<int>();

<#=this.ToCamelCase(tb_name)#>.<#=primaryKeyParams[0]#>=id;
returnid>0;
}
}
<#
}
else
{
#>
publicstaticboolInsert(<#=tb_name#><#=this.ToCamelCase(tb_name)#>)
{
using(varcontext=db.Context())
{
returncontext.Insert<<#=tb_name#>>("<#=tb_name#>",<#=this.ToCamelCase(tb_name)#>)
.Execute()>0;
}
}
<#}#>
publicstaticboolUpdate(<#=tb_name#><#=this.ToCamelCase(tb_name)#>)
{
using(varcontext=db.Context())
{
returncontext.Update<<#=tb_name#>>("<#=tb_name#>",<#=this.ToCamelCase(tb_name)#>)
.AutoMap(x=><#=updateAutomap#>)
<#foreach(stringpkpinprimaryKeyParams){#>
.Where("<#=pkp#>",<#=this.ToCamelCase(tb_name)#>.<#=pkp#>)
<#}#>
.Execute()>0;
}
}

publicstaticboolDelete(<#=tb_name#><#=this.ToCamelCase(tb_name)#>)
{
returnDelete(<#=string.Join(",",primaryKeyParams.Select(x=>this.ToCamelCase(tb_name)+"."+x).ToArray())#>);
}

publicstaticboolDelete(<#=string.Join(",",primaryKeyParamsWithTypes.ToArray())#>)
{
using(varcontext=db.Context())
{
returncontext.Sql("DELETEFROMProductWHERE<#=string.Join("AND",whereItems.ToArray())#>")
<#foreach(stringpkpinprimaryKeyParams){
WriteLine(".Parameter(\""+pkp.ToLower()+"\","+this.ToCamelCase(pkp)+")");
}#>
.Execute()>0;
}
}
}

}

<#
manager.EndBlock();
}
conn.Close();
manager.Process(true);
#>

<#+
publicstringToCamelCase(stringvalue)
{
if(string.IsNullOrEmpty(value))
returnstring.Empty;

stringfirstLetter=value.Substring(0,1);
stringrest=value.Substring(1,value.Length-1);
returnfirstLetter.ToLower()+rest;
}
#>

CTRL+S自动生成

下载地址:FlunenData.Model

完成!即可快速开发了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: