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模板导入
2.文件块:使用代码标识区分生成的代码块的范围
manager.StartNewFile(tb_name+".cs");
//代码块
manager.EndBlock();
3.编译执行:使用Process方法,进行文件分割
实践:
1.批量生成实体类
2.批量生成基础业务逻辑
CTRL+S自动生成
下载地址:FlunenData.Model
完成!即可快速开发了!
FluentData,它是一个轻量级框架,关注性能和易用性。
下载地址:
利用T4模板,【MultipleOutputHelper.ttinclude】批量生成多文件
基本语法:
1.初始化:获取
//导入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自动生成
下载地址:
完成!即可快速开发了!
相关文章推荐
- 快速上手如何使用FluentData
- 【dfs预处理+DLX】hdu 4069 Squiggly Sudoku
- 微型 ORM-FluentData 温故知新系列
- NgModelController: $setViewValue,$render,Formatter, Parser
- Arduino 9g舵机操作
- 条款20:宁以 pass-by-reference to const 替换 pass by value
- (iOS软件开发UI部分)UIButton基本使用
- deque及迭代器失效问题
- iPhone第四节:UIDatePicker、UIPickerView
- UIWindow ,UIView
- String StringBuffer StringBuilder 区别
- PAT 1085. Perfect Sequence (25)
- 【leetcode】permutation sequence
- IOS开发UI进阶之UITableView一
- Arduino 操作共阴极RGB LED
- UIViewAndUILableAndUITextField学习
- 浅谈UIAlertView
- javaSE基础编程——GUI窗体设计之记事本(使用监听器)
- VIM编辑器:使用cscope老是出现一些E259: no matches found for csope query 问题;
- javaSE基础编程——GUI窗体