CodeSmithJames/DALayer/Base/DALayerBase.cst <%-- Name:数据访问层的代码生成器. Author: DENG YULIN --%> <%@ CodeTemplate Language="C#" Src="../../CommonSqlCode.cs" Inherits="MoM.Templates.CommonSqlCode" ResponseEncoding="UTF-8" TargetLanguage="C#" Description="数据访问层的代码生成器." %> <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="DataSource" Description="Table that the entity layer class should be based on." %> <%-- 节点Namespaces --%> <%@ Property Name="NameSpace" Default="James" Optional="False" Type="System.String" Category="Namespaces" Description="The namespace to use for these classes." %> <%-- 节点UserInfo--%> <%@ Property Name="YourName" Type="System.String" Default="James" Optional="False" Category="UserInfo" Description="User Name." %> <%@ Assembly Name="SchemaExplorer" %> <%@ Assembly Name="System.Design" %> <%@ Import Namespace="SchemaExplorer" %> <%@ Import Namespace="System.Collections" %> <% //定义EntityclassName、DALclassName、InstanceName string EntityclassName = GetClassName(SourceTable.Name); string DALclassName = GetClassName(SourceTable.Name) + "DAL"; string InstanceName = "my" + EntityclassName; //定义一般列实例 ColumnSchemaCollection cols = SourceTable.Columns; //定义主键列实例 ColumnSchemaCollection pcols = new ColumnSchemaCollection(); if( this.HasPrimaryKey(SourceTable) ){ pcols = SourceTable.PrimaryKey.MemberColumns; } //定义非主键列实例 ColumnSchemaCollection npcols = new ColumnSchemaCollection(); npcols = SourceTable.NonPrimaryKeyColumns; //定义外键列实例 TableKeySchemaCollection fkeys = new TableKeySchemaCollection(); if( SourceTable.ForeignKeyColumns.Count > 0 ){ fkeys = SourceTable.ForeignKeys; } %> using System; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Collections; using System.Collections.Generic; using Microsoft.Practices.EnterpriseLibrary; using Microsoft.Practices.ObjectBuilder; using Microsoft.Practices.EnterpriseLibrary.Common; using Microsoft.Practices.EnterpriseLibrary.Data; using DBML; ///Date Created: <%= DateTime.Now.ToLongDateString() %> ///Created By: Generated by <% if (YourName.Length > 0) {Response.Write(YourName);} else {Response.Write("James");}%> namespace <%= NameSpace %> { //数据访问类(抽象类、基类) public abstract class <%= DALclassName %>Base { <% if( HasPrimaryKey(SourceTable) ){ %> #region IsExistDataInTable /// <summary> /// 判断表中是否含有此实例已赋值字段的数据记录,参数:通过表的所有主键 /// </summary> public bool IsExistDataInTable ( <% for( int i = 0; i < pcols.Count; i++ ){ %> <%= ConvertDBTypeToCSType(pcols[i]) %> <%= GetRefNameInFunction(pcols[i].Name) %> <% if (i < (pcols.Count - 1)) Response.Write(","); %> <% } %> ) { Database db = DatabaseFactory.CreateDatabase(); //插入的SQL语句 string mySQL = " SELECT COUNT(*) FROM <%= SourceTable.Name %> " + " WHERE " <% for (int i = 0; i < pcols.Count; i++) { %> + "<% if (i > 0) Response.Write(" AND "); %> <%= pcols[i].Name %> = @<%= pcols[i].Name %> "<% if (i == (pcols.Count-1)) Response.Write(" ; "); %> <% } %> DbCommand myDbCommand = db.GetSqlStringCommand(mySQL); //对参数赋值 <% for(int i = 0; i < pcols.Count; i++) {%> db.AddInParameter(myDbCommand, "@<%= pcols[i].Name %>", <%= GetDbType(pcols[i]) %>, <%= this.GetRefNameInFunction( pcols[i].Name )%>); <% } %> DataSet dt = db.ExecuteDataSet(myDbCommand); int intResult = Convert.ToInt32(dt.Tables[0].Rows[0][0]); if( intResult > 0 ){ return true; }else{ return false; } } /// <summary> /// 判断表中是否含有此实例已赋值字段的数据记录,参数:数据表对应的实体类实例 /// </summary> public bool IsExistDataInTable ( <%= EntityclassName %> <%= InstanceName %> ) { return IsExistDataInTable ( <% for( int i = 0; i < pcols.Count; i++ ){ %> <%= InstanceName %>.<%= this.GetPublicNameInClass( pcols[i].Name )%><% if (i < (pcols.Count - 1)) Response.Write(","); %> <% } %> ); } #endregion IsExistDataInTable #region GetByKey /// <summary> /// 根据主键查询数据表的记录,参数:表的所有主键字段 /// </summary> public <%= EntityclassName %> GetByKey ( <% for( int i = 0; i < pcols.Count; i++ ){ %> <%= ConvertDBTypeToCSType(pcols[i]) %> <%= GetRefNameInFunction(pcols[i].Name) %> <% if (i < (pcols.Count - 1)) Response.Write(","); %> <% } %> ) { Database db = DatabaseFactory.CreateDatabase(); //插入的SQL语句 string mySQL = "SELECT " + "<% for (int i = 0; i < cols.Count; i++) { %> <%= cols[i].Name %><% if( i != cols.Count - 1) Response.Write(","); %> <% } %>" + "FROM <%= SourceTable.Name %> " + "WHERE " <% for (int i = 0; i < pcols.Count; i++) { %> + "<% if (i > 0) Response.Write("AND "); %><%= pcols[i].Name %> = @<%= pcols[i].Name %> "<% if (i == (pcols.Count-1)) Response.Write(" ; ");%> <% } %> DbCommand myDbCommand = db.GetSqlStringCommand(mySQL); //对参数赋值 <% for( int i = 0; i < pcols.Count; i++ ){%> db.AddInParameter(myDbCommand, "@<%= pcols[i].Name %>", <%= GetDbType(pcols[i]) %>, <%= this.GetRefNameInFunction( pcols[i].Name )%>); <% } %> <%= EntityclassName %> detail = new <%= EntityclassName %>(); using( IDataReader dr = db.ExecuteReader(myDbCommand) ) { if( dr.Read() ){ <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %> <%= GetReaderAssignmentStatement(SourceTable.Columns[i], i) %> <% } %> } } return detail; } #endregion GetByKey #region FindAllByCondition /// <summary> /// 根据条件查询所有数据表的记录,参数:表的所有字段 /// </summary> public IList< <%= EntityclassName %> > FindAllByCondition ( <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= ConvertDBTypeToCSType(cols[i]) %> <%= GetRefNameInFunction(cols[i].Name) %> <% if (i < (cols.Count - 1)) Response.Write(","); %> <% } %> ) { Database db = DatabaseFactory.CreateDatabase(); //SQL语句 string mySQL = ""; mySQL += " SELECT " + "<% for(int i = 0; i < cols.Count; i++){ %> <%= cols[i].Name %> <% if(i < (cols.Count - 1) ) Response.Write(","); %> <% } %>" + " FROM <%= SourceTable.Name %>" + " WHERE " <% for (int i = 0; i < cols.Count; i++) { if( this.IsIdentityColumn(cols[i]) ) continue;%> + " ((@<%= cols[i].Name %> IS NULL) OR (<% if (cols[i].DataType == DbType.DateTime ){%>DateDiff(d,@<%= cols[i].Name %>,<%= cols[i].Name %>)=0 <%} else {%> <%= cols[i].Name %> LIKE @<%= cols[i].Name %> <%} %>)) <% if (i < (cols.Count - 1)) Response.Write(" AND"); %>" <% } %> + " ORDER BY " <% for(int i = 0; i < pcols.Count; i++){ %> + " <%= pcols[i].Name %> ASC <% if(i < (pcols.Count - 1) ) Response.Write(","); %> "<% if (i == (pcols.Count-1)) Response.Write(" ; ");%> <% } %> DbCommand myDbCommand = db.GetSqlStringCommand(mySQL); //对参数赋值 <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue; %> db.AddInParameter(myDbCommand, "@<%= cols[i].Name %>", <%= GetDbType(cols[i]) %>, <%= this.GetRefNameInFunction( cols[i].Name )%>); <% } %> IList<<%= EntityclassName %>> list = new List<<%= EntityclassName %>>(); <%= EntityclassName %> detail = null; using( IDataReader dr = db.ExecuteReader(myDbCommand) ) { while( dr.Read() ) { detail = new <%= EntityclassName %>(); <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %> <%= GetReaderAssignmentStatement(SourceTable.Columns[i], i) %> <% } %> list.Add(detail); } dr.Close(); } return list; } /// <summary> /// 根据条件查询所有数据表的记录,参数:参数:数据表对应的实体类实例 /// </summary> public IList< <%= EntityclassName %> > FindAllByCondition ( <%= EntityclassName %> <%= InstanceName %> ) { return FindAllByCondition ( <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= InstanceName %>.<%= this.GetPublicNameInClass( cols[i].Name )%><% if (i < (cols.Count - 1)) Response.Write(","); %> <% } %> ); } #endregion FindAllByCondition #region Find /// <summary> /// 根据条件查询数据表的记录(从开始行----结束行),参数:表的所有字段,startRowIndex,maximumRows(和GridView的PageIndex,PageSize对应). /// 注:PageIndex表示GridView的第N页的第一行Index数 /// </summary> public IList< <%= EntityclassName %> > Find ( <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= ConvertDBTypeToCSType(cols[i]) %> <%= GetRefNameInFunction(cols[i].Name) %>, <% } %> int startRowIndex, int maximumRows ) { //判断是否为空格or NULL <% for( int i = 0; i < cols.Count; i++ ){ %> <% if( IsStringType(cols[i]) ){ %> if ( !String.IsNullOrEmpty(<%= GetRefNameInFunction(cols[i].Name) %>) ) {<%= GetRefNameInFunction(cols[i].Name) %> = '%'+ <%= GetRefNameInFunction(cols[i].Name) %> + '%';} else {<%= GetRefNameInFunction(cols[i].Name) %> = null;}; <% } %> <% } %> Database db = DatabaseFactory.CreateDatabase(); //SQL语句 string mySQL = ""; <% for(int i = 0; i < pcols.Count; i++){ %> mySQL += " <% =GetSqlDeclareMaxStatement(pcols[i]) %>"; <% } %> //得到@MAX if ((startRowIndex > 0) && (maximumRows > 0)) { mySQL += " SELECT " <% for(int i = 0; i < pcols.Count; i++){ %> + " @Max<%= pcols[i].Name %> = MAX(<%= pcols[i].Name %>)<% if(i < (pcols.Count - 1) ) Response.Write(","); %> " <% } %> + " FROM " + " (SELECT DISTINCT TOP (" + Convert.ToString(startRowIndex) +")" <% for(int i = 0; i < pcols.Count; i++){ %> + " <%= pcols[i].Name %> <% if(i < (pcols.Count - 1) ) Response.Write(","); %> " <% } %> + " FROM <%= SourceTable.Name %>" + " WHERE 1=1" <% for (int i = 0; i < cols.Count; i++) { if( this.IsIdentityColumn(cols[i]) ) continue;%> + " AND ((@<%= cols[i].Name %> IS NULL) OR (<% if (cols[i].DataType == DbType.DateTime ){%>DateDiff(d,@<%= cols[i].Name %>,<%= cols[i].Name %>)=0 <%} else {%> <%= cols[i].Name %> LIKE @<%= cols[i].Name %> <%} %>)) " <% } %> + " ORDER BY " <% for(int i = 0; i < pcols.Count; i++){ %> + " <%= pcols[i].Name %> ASC <% if(i < (pcols.Count - 1) ) Response.Write(","); %> " <% } %> + " ) AS T "; } //当前页中需要显示的数据 mySQL += " SELECT DISTINCT TOP ("+ Convert.ToString(maximumRows) +") " + "<% for(int i = 0; i < cols.Count; i++){ %> <%= cols[i].Name %> <% if(i < (cols.Count - 1) ) Response.Write(","); %> <% } %>" + " FROM <%= SourceTable.Name %>" + " WHERE " <% for (int i = 0; i < pcols.Count; i++) { %> + " ((@Max<%= pcols[i].Name %> IS NULL) OR (<%= pcols[i].Name %> > @Max<%= pcols[i].Name %>)) AND " <% } %> <% for (int i = 0; i < cols.Count; i++) { if( this.IsIdentityColumn(cols[i]) ) continue;%> + " ((@<%= cols[i].Name %> IS NULL) OR (<% if (cols[i].DataType == DbType.DateTime ){%>DateDiff(d,@<%= cols[i].Name %>,<%= cols[i].Name %>)=0 <%} else {%> <%= cols[i].Name %> LIKE @<%= cols[i].Name %> <%} %>)) <% if (i < (cols.Count - 1)) Response.Write(" AND"); %>" <% } %> + " ORDER BY " <% for(int i = 0; i < pcols.Count; i++){ %> + " <%= pcols[i].Name %> ASC <% if(i < (pcols.Count - 1) ) Response.Write(","); %> "<% if (i == (pcols.Count-1)) Response.Write(" ; ");%> <% } %> DbCommand myDbCommand = db.GetSqlStringCommand(mySQL); //对参数赋值 <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue; %> db.AddInParameter(myDbCommand, "@<%= cols[i].Name %>", <%= GetDbType(cols[i]) %>, <%= this.GetRefNameInFunction( cols[i].Name )%>); <% } %> IList<<%= EntityclassName %>> list = new List<<%= EntityclassName %>>(); <%= EntityclassName %> detail = null; using( IDataReader dr = db.ExecuteReader(myDbCommand) ) { while( dr.Read() ) { detail = new <%= EntityclassName %>(); <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %> <%= GetReaderAssignmentStatement(SourceTable.Columns[i], i) %> <% } %> list.Add(detail); } dr.Close(); } return list; } /// <summary> /// 根据条件查询数据表的记录(从开始行----结束行),参数:数据表对应的实体类实例,startRowIndex,maximumRows(和GridView的PageIndex,PageSize对应) /// 注:PageIndex表示GridView的第N页的第一行Index数 /// </summary> public IList< <%= EntityclassName %> > Find ( <%= EntityclassName %> <%= InstanceName %>, int startRowIndex, int maximumRows ) { return Find ( <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= InstanceName %>.<%= GetPublicNameInClass(cols[i].Name) %>, <% } %> startRowIndex, maximumRows ); } #endregion Find #region FindCount /// <summary> /// 根据条件查询数据表的记录,参数:表的所有字段,startRowIndex,maximumRows(和GridView的PageIndex,PageSize对应) /// 注:PageIndex表示GridView的第N页的第一行Index数 /// </summary> public int FindCount ( <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= ConvertDBTypeToCSType(cols[i]) %> <%= GetRefNameInFunction(cols[i].Name) %>, <% } %> int startRowIndex, int maximumRows ) { //判断是否为空格or NULL <% for( int i = 0; i < cols.Count; i++ ){ %> <% if( IsStringType(cols[i]) ){ %> if ( !String.IsNullOrEmpty(<%= GetRefNameInFunction(cols[i].Name) %>) ) {<%= GetRefNameInFunction(cols[i].Name) %> = '%'+ <%= GetRefNameInFunction(cols[i].Name) %> + '%';} else {<%= GetRefNameInFunction(cols[i].Name) %> = null;}; <% } %> <% } %> Database db = DatabaseFactory.CreateDatabase(); //SQL语句 string mySQL = " SELECT COUNT(DISTINCT <%= pcols[0].Name %>) as recordCount " + " FROM <%= SourceTable.Name %>" + " WHERE 1=1" <% for (int i = 0; i < cols.Count; i++) { if( this.IsIdentityColumn(cols[i]) ) continue;%> + " AND ((@<%= cols[i].Name %> IS NULL) OR (<% if (cols[i].DataType == DbType.DateTime ){%>DateDiff(d,@<%= cols[i].Name %>,<%= cols[i].Name %>)=0 <%} else {%> <%= cols[i].Name %> LIKE @<%= cols[i].Name %> <%} %>)) "<% if (i == (cols.Count-1)) Response.Write(" ; ");%> <% } %> DbCommand myDbCommand = db.GetSqlStringCommand(mySQL); //对参数赋值 <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue; %> db.AddInParameter(myDbCommand, "@<%= cols[i].Name %>", <%= GetDbType(cols[i]) %>, <%= this.GetRefNameInFunction( cols[i].Name )%>); <% } %> DataSet dt = db.ExecuteDataSet(myDbCommand); int intResult = Convert.ToInt32(dt.Tables[0].Rows[0][0]); return intResult; } /// <summary> /// 根据条件查询数据表的记录,参数:数据表对应的实体类实例,startRowIndex,maximumRows(和GridView的PageIndex,PageSize对应) /// 注:PageIndex表示GridView的第N页的第一行Index数 /// </summary> public int FindCount ( <%= EntityclassName %> <%= InstanceName %>, int startRowIndex, int maximumRows ) { return FindCount ( <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= InstanceName %>.<%= GetPublicNameInClass(cols[i].Name) %>, <% } %> startRowIndex, maximumRows ); } #endregion Find #region Insert /// <summary> /// 插入一条数据记录,参数:数据表对应的所有字段 /// </summary> public int Insert ( <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= ConvertDBTypeToCSType(cols[i]) %> <%= GetRefNameInFunction(cols[i].Name) %> <% if (i < (cols.Count - 1)) Response.Write(","); %> <% } %> ) { Database db = DatabaseFactory.CreateDatabase(); //插入的SQL语句 string mySQL = "INSERT INTO <%= SourceTable.Name %>" + "(<% for (int i = 0; i < cols.Count; i++) { if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= cols[i].Name %><% if( i != cols.Count - 1) Response.Write(","); %> <% } %>)" + " VALUES " + "(<% for (int i = 0; i < cols.Count; i++) { if( this.IsIdentityColumn(cols[i]) ) continue;%>@<%= cols[i].Name %><% if( i != cols.Count - 1) Response.Write(","); %> <% } %>)"; DbCommand myDbCommand = db.GetSqlStringCommand(mySQL); //对参数赋值 <% for(int i = 0; i < cols.Count; i++) {if( this.IsIdentityColumn(cols[i]) ) continue;%> db.AddInParameter(myDbCommand, "@<%= cols[i].Name %>", <%= GetDbType(cols[i]) %>, <%= GetRefNameInFunction(cols[i].Name) %>); <% } %> return db.ExecuteNonQuery(myDbCommand); } /// <summary> /// 插入一条数据记录,参数:数据表对应的实体类实例 /// </summary> public int Insert ( <%= EntityclassName %> <%= InstanceName %> ) { return Insert ( <% for( int i = 0; i < cols.Count; i++ ){ if( this.IsIdentityColumn(cols[i]) ) continue;%> <%= InstanceName %>.<%= this.GetPublicNameInClass( cols[i].Name )%><% if (i < (cols.Count - 1)) Response.Write(","); %> <% } %> ); } #endregion Insert #region Update /// <summary> /// 修改一条数据记录,参数:数据表对应的所有字段 /// </summary> public int Update ( <% for( int i = 0; i < cols.Count; i++ ){%> <%= ConvertDBTypeToCSType(cols[i]) %> <%= GetRefNameInFunction(cols[i].Name) %> <% if (i < (cols.Count - 1)) Response.Write(","); %> <% } %> ) { Database db = DatabaseFactory.CreateDatabase(); //插入的SQL语句 string mySQL = "UPDATE <%= SourceTable.Name %> " + "SET " <% for (int i = 0; i < npcols.Count; i++) { if( this.IsIdentityColumn(npcols[i]) ) continue;%> + "<%= npcols[i].Name %> = @<%= npcols[i].Name %><% if( i != npcols.Count - 1) Response.Write(","); %> " <% } %> + "WHERE " <% for (int i = 0; i < pcols.Count; i++) { %> + "<% if (i > 0) Response.Write("AND "); %><%= pcols[i].Name %> = @<%= pcols[i].Name %> "<% if (i == (pcols.Count-1)) Response.Write(" ; ");%> <% } %> DbCommand myDbCommand = db.GetSqlStringCommand(mySQL); //对参数赋值 <% for(int i = 0; i < cols.Count; i++) {%> db.AddInParameter(myDbCommand, "@<%= cols[i].Name %>", <%= GetDbType(cols[i]) %>, <%= GetRefNameInFunction(cols[i].Name) %>); <% } %> return db.ExecuteNonQuery(myDbCommand); } /// <summary> /// 插入一条数据记录,参数:数据表对应的实体类实例 /// </summary> public int Update ( <%= EntityclassName %> <%= InstanceName %> ) { return Update ( <% for( int i = 0; i < cols.Count; i++ ){%> <%= InstanceName %>.<%= this.GetPublicNameInClass( cols[i].Name )%><% if (i < (cols.Count - 1)) Response.Write(","); %> <% } %> ); } #endregion Update #region Delete /// <summary> /// 删除一条数据记录,参数:数据表对应的所有主键 /// </summary> public int Delete ( <% for( int i = 0; i < pcols.Count; i++ ){ %> <%= ConvertDBTypeToCSType(pcols[i]) %> <%= GetRefNameInFunction(pcols[i].Name) %> <% if (i < (pcols.Count - 1)) Response.Write(","); %> <% } %> ) { Database db = DatabaseFactory.CreateDatabase(); //插入的SQL语句 string mySQL = "DELETE FROM <%= SourceTable.Name %> " + "WHERE " <% for (int i = 0; i < pcols.Count; i++) { %> + "<% if (i > 0) Response.Write("AND "); %><%= pcols[i].Name %> = @<%= pcols[i].Name %> "<% if (i == (pcols.Count-1)) Response.Write(" ; ");%> <% } %> DbCommand myDbCommand = db.GetSqlStringCommand(mySQL); //对参数赋值 <% for( int i = 0; i < pcols.Count; i++ ){%> db.AddInParameter(myDbCommand, "@<%= pcols[i].Name %>", <%= GetDbType(pcols[i]) %>, <%= this.GetRefNameInFunction( pcols[i].Name )%>); <% } %> return db.ExecuteNonQuery(myDbCommand); } /// <summary> /// 删除一条数据记录,参数:数据表对应的实体类实例 /// </summary> public int Delete ( <%= EntityclassName %> <%= InstanceName %> ) { return Delete ( <% for( int i = 0; i < pcols.Count; i++ ){ %> <%= InstanceName %>.<%= this.GetPublicNameInClass( pcols[i].Name )%><% if (i < (pcols.Count - 1)) Response.Write(","); %> <% } %> ); } #endregion Delete <% } %> } }