CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
C#生成sql视图的实体类
using System;
using System.Text;
using CodeSmith.Engine;
using SchemaExplorer;
using System.ComponentModel;
using System.Data;
namespace Common.Data
{
/// <summary>
/// CodeSmith生成SQL Server视图的实体类脚本
/// </summary>
public class ViewUtility
{
//get Columns info by TableName
public ViewColumnSchemaCollection GetColumnCollectionByTable(ViewSchema table)
{
ViewColumnSchemaCollection columns = new ViewColumnSchemaCollection(table.Columns);
return columns;
}
//Get camelcase name,such as Customer,
public string GetCamelCaseName(string str)
{
return str.Substring(0, 1).ToUpper() + str.Substring(1);
}
//Get ,user,private const String USER_FIELD = "User"
public string GetMemberConstantDeclarationStatement(ColumnSchema column)
{
return GetMemberConstantDeclarationStatement("public const String ", column);
}
//such as public const String USER_TABLE = "User"
public string GetTableConstantDeclarationStatement(ViewSchema table)
{
return GetMemberConstantDeclarationStatement("public const String ", table);
}
//suck as USER_TABLE
public string GetUpperStatement(ViewSchema table)
{
return table.Name.ToUpper() + "_TABLE";
}
//suck as USER_FIELD
public string GetUpperStatement(ColumnSchema column)
{
return column.Name.ToUpper() + "_FIELD";
}
// such as USER_TABLE = "User"
public string GetMemberConstantDeclarationStatement(string protectionLevel, ViewSchema table)
{
return protectionLevel + GetUpperStatement(table) + " = " + GetCamelCaseName(table.Name) + "";
}
//such as USERID_FIELD = "Userid"
public string GetMemberConstantDeclarationStatement(string protectionLevel, ColumnSchema column)
{
return protectionLevel + GetUpperStatement(column) + " = " + GetCamelCaseName(column.Name) + "";
}
public string GetCSharpVariableType(ViewColumnSchema column)
{
switch (column.DataType)
{
case DbType.AnsiString: return "string";
case DbType.AnsiStringFixedLength: return "string";
case DbType.Binary: return "byte[]";
case DbType.Boolean: return "bool";
case DbType.Byte: return "int";
case DbType.Currency: return "decimal";
case DbType.Date: return "DataTime";
case DbType.DateTime: 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 "TimeSpan";
case DbType.UInt16: return "ushort";
case DbType.UInt32: return "uint";
case DbType.UInt64: return "ulong";
case DbType.VarNumeric: return "decimal";
}
return null;
}
public string GetCSharpBaseType(ViewColumnSchema column)
{
switch (column.DataType)
{
case DbType.AnsiString: return "System.String";
case DbType.AnsiStringFixedLength: return "System.String";
case DbType.Binary: return "System.Byte[]";
case DbType.Boolean: return "System.Boolean";
case DbType.Byte: return "System.Int32";
case DbType.Currency: return "System.Decimal";
case DbType.Date: return "System.DataTime";
case DbType.DateTime: return "System.DataTime";
case DbType.Decimal: return "System.Decimal";
case DbType.Double: return "System.Double";
case DbType.Guid: return "System.Guid";
case DbType.Int16: return "System.Int16";
case DbType.Int32: return "System.Int32";
case DbType.Int64: return "System.Int64";
case DbType.Object: return "System.Object";
case DbType.SByte: return "System.SByte";
case DbType.Single: return "System.Single";
case DbType.String: return "System.String";
case DbType.StringFixedLength: return "System.String";
case DbType.Time: return "System.TimeSpan";
case DbType.UInt16: return "System.UInt16";
case DbType.UInt32: return "System.UInt32";
case DbType.UInt64: return "System.UInt64";
case DbType.VarNumeric: return "System.Decimal";
}
return null;
}
}
}
对应的.cst模板
<%@ CodeTemplate Language="C#" ResponseEncoding="UTF-8" TargetLanguage="T-SQL" Description="生成更新视图的存储过程." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.ViewSchema" Category="Context" Description="存储过程操作的视图名称." %>
<%@ Assembly Src="ViewUtility.cs" %>
<%@ Import Namespace="Common.Data" %>
<script runat="template">
public string FormatTable(string param)
{
string[] p =param.Split('_');
return p[p.Length-1].ToString();
}
public string ReplaceTablePrex(string param)
{
return param.Replace("fw_","");
}
public string Format(string param1)
{
string param="";
switch (param1)
{
case "System.String":
{
param = "Convert.ToString";
break;
}
case "System.DateTime":
{
param = "Convert.ToDateTime";
break;
}
case "System.Decimal":
{
param="Convert.ToDecimal";
break;
}
case "System.Boolean":
{
param="Convert.ToBoolean";
break;
}
default:
{
param ="Convert.ToInt32";
break;
}
}
return param;
}
public string FormatValue(string param1)
{
string param="";
switch (param1)
{
case "System.String":
{
param = "\"\"";
break;
}
case "System.DateTime":
{
param = "DateTime.Now";
break;
}
case "System.Decimal":
{
param="Decimal.Parse(\"0.00\")";
break;
}
case "System.Boolean":
{
param="false";
break;
}
default:
{
param ="0";
break;
}
}
return param;
}
ViewUtility rule=new ViewUtility();
</script>
using System;
using com.enkj.kernel;
namespace com.enkj.SongHe.Model
{
/// <summary>
/// 读取数据库对应的视图 '<%= SourceTable.Name %>'
/// </summary>
[Serializable]
public class <%=FormatTable(SourceTable.Name)%>:IEntity
{
/// <summary>
///表名
/// </summary>
public const string TABLE_NAME = "<%=SourceTable.Name%>";
/// <summary>
/// 表中所有字段集合
/// </summary>
public const string ALL_FILED = @"<%for(int i=0;i<SourceTable.Columns.Count;i++){%><%if(i<SourceTable.Columns.Count-1){%>[<%=SourceTable.Columns[i].Name%>],<%}else{%>[<%=SourceTable.Columns[i].Name%>]<%}%><%}%>";
<%for(int i=0;i<SourceTable.Columns.Count;i++){%>
/// <summary>
/// <%=SourceTable.Columns[i].Description%>字段
/// </summary>
public const string FLD_<%=SourceTable.Columns[i].Name%>="<%=SourceTable.Columns[i].Name%>";
/// <summary>
/// <%=SourceTable.Columns[i].Description%>参数字段
/// </summary>
public const string FAR_<%=SourceTable.Columns[i].Name%>="@<%=SourceTable.Columns[i].Name%>";
private <%=SourceTable.Columns[i].SystemType%> _<%=SourceTable.Columns[i].Name%>=<%=FormatValue(SourceTable.Columns[i].SystemType.ToString())%>;
/// <summary>
/// <%=SourceTable.Columns[i].Description%>
/// </summary>
public <%=SourceTable.Columns[i].SystemType%> <%=SourceTable.Columns[i].Name%>
{
get { return _<%=SourceTable.Columns[i].Name%>; }
set { _<%=SourceTable.Columns[i].Name%> = value; }
}
<%}%>
/// <summary>
/// 无参构造函数
/// </summary>
public <%=FormatTable(SourceTable.Name)%>()
{
}
/// <summary>
/// 通过DataRow实例化一个对象
/// </summary>
/// <param name="_DataRow">行记录</param>
public override void SetDataRow(System.Data.DataRow _DataRow)
{
<%for(int i=0;i<SourceTable.Columns.Count;i++){%>
try
{
if( _DataRow.Table.Columns.Contains(FLD_<%=SourceTable.Columns[i].Name%>))
this.<%=SourceTable.Columns[i].Name%> = <%=Format(SourceTable.Columns[i].SystemType.ToString())%>(_DataRow[FLD_<%=SourceTable.Columns[i].Name%>]);
}
catch(Exception ex)
{
throw new Exception("<%=SourceTable.Name%>::SetDataRow : 语句:this.<%=SourceTable.Columns[i].Name%> = <%=Format(SourceTable.Columns[i].SystemType.ToString())%>(_DataRow[FLD_<%=SourceTable.Columns[i].Name%> ]); 转化失败 ");
}
<%}%>
}
}
}
CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板的更多相关文章
- Java代码实体类生成SQL语句(Java实体类转数据库)
有的时候把数据库删了,如果照着实体类重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体类转换为SQL语句输出为一个文件,打开执行命令即可. 下载:ht ...
- 通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句
参考: https://blog.csdn.net/qq465235530/article/details/68064074 https://www.cnblogs.com/zj0208/p/6008 ...
- 用MyEclipse自动生成hibernate映射文件和实体类
创建数据库,创建相应的表 点击图标,选择MyEclipse Datebase Explorer 右击空白区域,选择new菜单,根据提示创建数据库连接,创建好后会显示你所创建的连接名,如图mysqldb ...
- 生成 hibernate 映射文件和实体类
创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤 创建数据库,创建 ...
- 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭。
错误:由于启动用户实例的进程时出错,导致无法生成SQL Server的用户实例. 原因:添加安装SQLEXPRESS时,估计装在了不同的目录下: 解决方法:关闭Sqlserver及相关的程序,删除目录 ...
- 利用PowerDesigner绘制PDM生成SQL Server数据库
PowerDesigner是个很强大的建模工具,可以利用它绘制各种图形,本文利用该工具绘制PDM,进而生成SQL Server数据库. 比如绘制一个简单的学生选课.教师授课管理系统的PDM: pk表示 ...
- 11、SQL Server 视图、数据库快照
SQL Server 视图 什么是视图? 视图是一个虚拟的表,内容源于查询的结果集.只有当视图上建立了索引后,才会具体化. 视图可以筛选和处理数据,而不是直接访问基础表.如:创建一个视图,只展示源表中 ...
- 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例
/”应用程序中的服务器错误. 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例.请确保该用户在此计算机上有本地用户配置文件.该连接将关闭. 堆栈跟踪: [Sql ...
- 使用SQL Server视图的优缺点
SQL Server视图我们经常会用的到,下面就为您介绍使用SQL Server视图的优缺点,希望可以对您SQL Server视图有更多的了解. 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避 ...
随机推荐
- Hive基础之排序
order by 1.order by会对输入按照指定字段做全局排序,输出结果有序,因此只有一个reducer(多个reducer无法保证全局排序,手工设定reduce数量无效): 只有一个reduc ...
- 普适注意力:用于机器翻译的2D卷积神经网络,显著优于编码器-解码器架构
现有的当前最佳机器翻译系统都是基于编码器-解码器架构的,二者都有注意力机制,但现有的注意力机制建模能力有限.本文提出了一种替代方法,这种方法依赖于跨越两个序列的单个 2D 卷积神经网络.该网络的每一层 ...
- ORM创建 脚本运行
- Python序列化和反序列化vsJSON
# -*- coding: utf-8 -* """没有嵌套类的类 author: Jill usage: """ import json ...
- JavaScript判断浏览器及其版本信息
通过window.navigator来判断: function getBrowserInfo(){ var Info = {}; var str = window.navigator.userAgen ...
- ASCII字符串互换
//ASCII码转成字符: var a:String=String.fromCharCode(97); trace(a);//输出:a //字符转成ASCII码: var str:String = “ ...
- 8 并发编程-(线程)-多线程与多进程的区别&Thread对象的其他属性或方法
1.开启速度 在主进程下开启线程比 开启子进程快 # 1 在 主进程下开启线程 from threading import Thread def work(): print('hello') if ...
- import 语句用于导入从外部模块,另一个脚本等导出的函数,对象或原语。
import 语句用于导入从外部模块,另一个脚本等导出的函数,对象或原语. 注意:此功能目前无法在任何浏览器中实现.它在许多转换器中实现,例如 Traceur Compiler , Babel , R ...
- 编写ios和android共用的c/c++库时 使用iconv的问题(转)
因为在项目中需要同时维护ios和Android,不同的代码不利于开发的便捷和以后的维护,所以在最近的一个项目中,两种手机应用的通信部分打算使用c/c++库来统一编写,ios调用.a静态库,androi ...
- Haskell语言学习笔记(52)正则表达式
Text.Regex.PCRE.Heavy $ brew install pcre $ cabal install pcre-heavy Installed pcre-heavy-1.0.0.2 Pr ...