CodeSmith 创建Ado.Net自定义模版(三)
时间:2022-04-22
本文章向大家介绍CodeSmith 创建Ado.Net自定义模版(三),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
CodeSmith 创建Ado.Net自定义模版(三)
接上一篇: CodeSmith 创建Ado.Net自定义模版(二)
写数据访问层模版:Step3_DAL.cst (接口一这步在这套模版中省略,可以自行补充)
写几个通用方法,比如:得到全部实体集合、通过ID得实体、添加、删除、修改几个方法
我这里没有使用sqlhelper之类的帮助类
<%@ CodeTemplate Language="C#" TargetLanguage="C#" ResponseEncoding="UTF-8" Description="实体类" %>
<%@ Property Name="NameSpace" Type="System.String" Default="Service" Category="Property" Description="命名空间" %>
<%@ Property Name="ModelNameSpace" Type="System.String" Default="Model" Category="String" Description="实体层的命名空间" %>
<%@ Property Name="UtilityNameSpace" Type="System.String" Default="Utility" Category="String" Description="工具层的命名空间" %>
<%@ Property Name="Author" Type="System.String" Default="Wilson" Category="Property" Description="作者名" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Optional="True" Category="db" Description="表映射文件" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>
<script runat="template">
///<summary>
///把数据库类型转化为C#类型
///</summary>
public string DataType2CSharpType(System.Data.DbType dbType)
{
switch (dbType)
{
case DbType.AnsiString:
return "string";
case DbType.AnsiStringFixedLength:
return "string";
case DbType.Binary:
return "byte[]";
case DbType.Boolean:
return "bool";
case DbType.Byte:
return "byte";
case DbType.Currency:
return "decimal";
case DbType.Date:
return "DateTime";
case DbType.DateTime:
return "DateTime";
case DbType.DateTime2:
return "DateTime";
case DbType.DateTimeOffset:
return "DateTime";
case DbType.Decimal:
return "decimal";
case DbType.Double:
return "double";
case DbType.Guid:
return "Guid";
case DbType.Int16:
return "short";
case DbType.Int32:
return "int";
case DbType.Int64:
return "long";
case DbType.Object:
return "object";
case DbType.SByte:
return "sbyte";
case DbType.Single:
return "float";
case DbType.String:
return "string";
case DbType.StringFixedLength:
return "string";
case DbType.Time:
return "DateTime";
case DbType.UInt16:
return "ushort";
case DbType.UInt32:
return "uint";
case DbType.UInt64:
return "ulong";
case DbType.VarNumeric:
return "decimal";
case DbType.Xml:
return "string";
default:
return "object";
}
}
///<summary>
/// 字符串转化为小写
///</summary>
public string ToLowercase(string str)
{
str = str.ToLower();
return str;
}
///<summary>
/// 泛型
///</summary>
public string ToGeneric(string str)
{
str = "<" + str + ">";
return str;
}
</script>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using <%=ModelNameSpace%>
using <%=UtilityNameSpace%>
namespace <%=NameSpace%>
{
///<summary>
/// 功能:<%=SourceTable.Name%>类数据访问
/// 创建人:<%=Author%>
/// 创建时间:<%=DateTime.Now.ToShortDateString() %>
///</summary>
public class <%=SourceTable.Name%>Service : IDisposable
{
#region 公共
private System.ComponentModel.Component component = new System.ComponentModel.Component();
private bool disposed = false;
~<%=SourceTable.Name%>Service()
{
Dispose(false);
}
#endregion
#region IDisposable 成员
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
component.Dispose();
}
disposed = true;
}
}
#endregion
<% if(SourceTable.HasPrimaryKey) %>
<%{%>
#region##通过主键ID得到<%=SourceTable.Name%>
///<summary>
/// 功能:通过ID得到<%=SourceTable.Name%>
/// 创建人: <%=Author%>
/// 创建时间:<%=DateTime.Now.ToShortDateString() %>
///</summary>
///<param name="">主键ID</param>
///<returns></returns>
public <%=SourceTable.Name%> Get<%=SourceTable.Name%>ById(<%=DataType2CSharpType(SourceTable.PrimaryKey.MemberColumns[0].DataType)%> <%=ToLowercase(SourceTable.PrimaryKey.MemberColumns[0].Name)%>)
{
<%=SourceTable.Name%> obj = null;
string sql = "select * from <%=SourceTable.Name%> where <%=SourceTable.PrimaryKey.MemberColumns[0].Name%> = @PK";
SqlConnection conn = new SqlConnection(WebConn.connString);
conn.Open();
SqlCommand com = new SqlCommand(sql, conn);
SqlParameter[] sp = new SqlParameter[]
{
new SqlParameter("@PK",<%=SourceTable.PrimaryKey.MemberColumns[0].Size%>)
};
sp[0].Value = <%=ToLowercase(SourceTable.PrimaryKey.MemberColumns[0].Name)%>;
com.Parameters.AddRange(sp);
SqlDataReader reader = com.ExecuteReader();
if (reader.Read())
{
obj = new <%=SourceTable.Name%>();
<%for(int i=0; i < SourceTable.Columns.Count; i ++)%>
<%{%>
obj.<%=SourceTable.Columns[i].Name%> = (<%=DataType2CSharpType(SourceTable.Columns[i].DataType)%>)reader["<%=SourceTable.Columns[i].Name%>"];
<%}%>
}
reader.Close();
reader.Dispose();
com.Dispose();
conn.Close();
conn.Dispose();
return material;
}
#endregion
#region##通过主键ID删除<%=SourceTable.Name%>
///<summary>
/// 功能:通过主键ID删除<%=SourceTable.Name%>
/// 创建人: <%=Author%>
/// 创建时间:<%=DateTime.Now.ToShortDateString() %>
///</summary>
///<param name="">主键ID</param>
///<returns></returns>
public int DeleteById(<%=DataType2CSharpType(SourceTable.PrimaryKey.MemberColumns[0].DataType)%> <%=ToLowercase(SourceTable.PrimaryKey.MemberColumns[0].Name)%>)
{
int i = 0;
string sql = "delete from <%=SourceTable.Name%> where <%=SourceTable.PrimaryKey.MemberColumns[0].Name%> = @PK";
SqlConnection conn = new SqlConnection(WebConn.connString);
conn.Open();
SqlCommand com = new SqlCommand(sql, conn);
SqlParameter[] sp = new SqlParameter[]
{
new SqlParameter("@PK",<%=SourceTable.PrimaryKey.MemberColumns[0].Size%>)
};
sp[0].Value = <%=ToLowercase(SourceTable.PrimaryKey.MemberColumns[0].Name)%>;
com.Parameters.AddRange(sp);
i = com.ExecuteNonQuery();
com.Dispose();
conn.Close();
conn.Dispose();
return i;
}
#endregion
<%}%>
#region##添加<%=SourceTable.Name%>
///<summary>
/// 功能:添加<%=SourceTable.Name%>
/// 创建人: <%=Author%>
/// 创建时间:<%=DateTime.Now.ToShortDateString() %>
///</summary>
///<param name=""></param>
///<returns></returns>
public int Add<%=SourceTable.Name%>(<%=SourceTable.Name%> <%=ToLowercase(SourceTable.Name)%>)
{
int result = 0;
string sql = "insert into <%=SourceTable.Name%>(<%for(int i = 0; i < SourceTable.Columns.Count ; i++)%><%{%><%=SourceTable.Columns[i].Name%><%if(i<SourceTable.Columns.Count - 1)%><%{%>,<%}%><%}%>) values(<%for(int i = 0; i < SourceTable.Columns.Count ; i++)%><%{%>@<%=SourceTable.Columns[i].Name%><%if(i<SourceTable.Columns.Count - 1)%><%{%>,<%}%><%}%>);
SqlConnection conn = new SqlConnection(WebConn.connString);
conn.Open();
SqlCommand com = new SqlCommand(sql, conn);
SqlParameter[] sp = new SqlParameter[]
{
<%for(int i=0;i < SourceTable.Columns.Count; i++)%>
<%{%>
new SqlParameter("@<%=SourceTable.Columns[i].Name%>",<%=SourceTable.Columns[i].Size%>)<%if(i<SourceTable.Columns.Count - 1)%><%{%>,<%}%>
<%}%>
};
<%for(int i=0;i < SourceTable.Columns.Count; i++)%>
<%{%>
sp[<%=i%>].Value = <%=ToLowercase(SourceTable.Name)%>.<%=SourceTable.Columns[i].Name%>;
<%}%>
com.Parameters.AddRange(sp);
result = com.ExecuteNonQuery();
com.Dispose();
conn.Close();
conn.Dispose();
return result;
}
#endregion
#region##得到<%=SourceTable.Name%>集合
///<summary>
/// 功能:得到<%=SourceTable.Name%>集合
/// 创建人: <%=Author%>
/// 创建时间:<%=DateTime.Now.ToShortDateString() %>
///</summary>
///<returns></returns>
public IList<%=ToGeneric(SourceTable.Name)%> GetList()
{
IList<%=ToGeneric(SourceTable.Name)%> list = new List<%=ToGeneric(SourceTable.Name)%>();
<%=SourceTable.Name%> obj = null;
string sql = "select * from <%=SourceTable.Name%>";
SqlConnection conn = new SqlConnection(WebConn.connString);
conn.Open();
SqlCommand com = new SqlCommand(sql, conn);
SqlDataReader reader = com.ExecuteReader();
while(reader.Read())
{
obj = new <%=SourceTable.Name%>();
<%for(int i=0; i < SourceTable.Columns.Count; i ++)%>
<%{%>
obj.<%=SourceTable.Columns[i].Name%> = (<%=DataType2CSharpType(SourceTable.Columns[i].DataType)%>)reader["<%=SourceTable.Columns[i].Name%>"];
<%}%>
list.Add(obj);
}
reader.Close();
reader.Dispose();
com.Dispose();
conn.Close();
conn.Dispose();
return list;
}
#endregion
#region##修改<%=SourceTable.Name%>
///<summary>
/// 功能:修改<%=SourceTable.Name%>
/// 创建人: <%=Author%>
/// 创建时间:<%=DateTime.Now.ToShortDateString() %>
///</summary>
///<param name=""></param>
///<returns></returns>
public int Mod<%=SourceTable.Name%>(<%=SourceTable.Name%> <%=ToLowercase(SourceTable.Name)%>)
{
int result = 0;
string sql = "update <%=SourceTable.Name%> set <%for(int i=0;i<SourceTable.Columns.Count;i++)%><%{%><%=SourceTable.Columns[i].Name%> = @<%=SourceTable.Columns[i].Name%><%if(i < SourceTable.Columns.Count - 1)%><%{%>,<%}%><%}%> where <%=SourceTable.PrimaryKey.MemberColumns[0].Name%> = @<%=SourceTable.PrimaryKey.MemberColumns[0].Name%>";
SqlConnection conn = new SqlConnection(WebConn.connString);
conn.Open();
SqlCommand com = new SqlCommand(sql, conn);
SqlParameter[] sp = new SqlParameter[]
{
<%for(int i=0;i < SourceTable.Columns.Count; i++)%>
<%{%>
new SqlParameter("@<%=SourceTable.Columns[i].Name%>",<%=SourceTable.Columns[i].Size%>)<%if(i<SourceTable.Columns.Count - 1)%><%{%>,<%}%>
<%}%>
};
<%for(int i=0;i < SourceTable.Columns.Count; i++)%>
<%{%>
sp[<%=i%>].Value = <%=ToLowercase(SourceTable.Name)%>.<%=SourceTable.Columns[i].Name%>;
<%}%>
com.Parameters.AddRange(sp);
result = com.ExecuteNonQuery();
com.Dispose();
conn.Close();
conn.Dispose();
return result;
}
#endregion
#region##修改<%=SourceTable.Name%>
///<summary>
/// 修改<%=SourceTable.Name%>
/// 创建人: <%=Author%>
/// 创建时间:<%=DateTime.Now.ToShortDateString() %>
///</summary>
///<param name=""></param>
///<returns></returns>
public int SelectCount()
{
int i = 0;
string sql = "select count(*) from <%=SourceTable.Name%>";
SqlConnection conn = new SqlConnection(WebConn.connString);
conn.Open();
SqlCommand com = new SqlCommand(sql, conn);
i = (int)com.ExecuteScalar();
com.Dispose();
conn.Dispose();
conn.Close();
return i;
}
#endregion
}
}
<script runat="template"> :这个标签中,可以写一些自己的方法,供下面调用
其它的就不多说了,大家自行看看
相关篇张:
CodeSmith 创建Ado.Net自定义模版(四) PS:第四篇有CodeSmith直接生成文件夹及文件的提示,如果需要自行扩展
- hdu----(4545)魔法串(LCS)
- Oracle压缩黑科技(二)—压缩数据的修改
- 在Pivotal Web Service上发布Spring Boot应用
- hdu---(1325)Is It A Tree?(并查集)
- spark2 sql编程样例:sql操作
- hdu----(1599)最大子矩阵(几何/dp)
- Go语言简单的TCP编程
- hdu---(1054)Strategic Game(最小覆盖边)
- Swagger Starter 1.4.0发布:新增swagger功能开源与全局参数的配置。
- Go语言语法汇总
- 整理的一些模版LCS(连续和非连续)
- 以太坊开发实战(第1部分:智能合约)
- spark2 sql读取数据源编程学习样例2:函数实现详解
- hdu---(4310)Hero(贪心算法)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- javascript预编译(执行期的上下文)
- Elasticsearch评分相关度算法解析
- Netty入门教程——认识Netty
- Linux下的包过滤软件:iptables剖析
- rxjs fromEvent的实现
- rxjs switchMap的实现原理
- rxjs里scan operator的执行研究
- rxjs pipe和map组合的一个实际例子的单步调试
- Win10+Python2.7.14+cocos2d-x-3.17.2+VS2017环境搭建
- VUE-001-在表格单元格(el-table-column)中添加超链接访问
- 关于vue的title标签中出现的htmlWebpackPlugin.options.title
- dotnet tool 工具安装提示 Could not find a part of the path 安装失败
- dotnet core 进行 XML 序列化抛出 XmlSerializers dll 文件找不到
- C# dotnet 高性能多线程工具 ExecuteOnceAwaiter 只执行一次的任务
- 一道Postgresql递归树题