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视图有更多的了解. 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避 ...
随机推荐
- 基于RDBMS的OLAP的解决方案
BI项目如何开发: 了解OLAP的分析方法: 对数据进行多维建模分析,也就是自己设计自己的数据方体,之后程序自动生成数据方体 数据方体: 1.自动成的表结构,仅仅有你需要的列 2.生成一条SQL语句( ...
- 常用模块:hashlib,subprocess,configparser。
一 hashlib模块 那么我们前面学习数据类型的时候,也讲了hash,可变类型不可hash:不可变类型可hash. 我们知道hash是一种算法,接收传入的内容经过运算之后得到一个hash值,我们可 ...
- python之列表操作
1.列表的增操作(四种) append(object):append object to end,directly used on list insert(index,object):insert o ...
- selenium+python自动化97--unittest参数化(paramunittest)
前言 paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例 前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例.本篇继续介绍 ...
- 逆地址解析协议RARP
解决的问题 一般系统启动时,从引导磁盘中获取ip 有些机器没有引导磁盘,如X终端或无盘工作站,则需要采用其他方法来获得IP地址 解决的过程 无盘系统依据RARP协议 从接口卡上读取唯一的硬件地址,然后 ...
- ssh连接失败,提示 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
[root@iZ2ze4kh1rvftq4cevdfjwZ ~]# ssh IP @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...
- 《内存数据库和mysql的同步机制》
如下图
- eclipse web run on server 404
eclipse真是个坑爹玩意儿,前期在idea开发的web,移到eclipse遇到各种问题 刚开始好好的,突然404,不明所以,搞了好几天 参考eclipse修改web项目部署路径 解决了问题 后来发 ...
- Jenkins自动打war包,并部署到tomcat服务器
由于每次修改完代码,都要手动打包部署,很麻烦.今天研究了一下Jenkins自动化部署,大概有以下几个步骤: 1.先配置tomcat 7的访问用户和密码.文件位于conf/tomcat-users.xm ...
- as3 程序域
问题我要在应用程序中载入其他域的swf文件,并且允许它访问程序中的 ActionScript 解决办法使用flash.system.Security.allowDomain( ), flash.sys ...