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视图的实体类脚本/对应的生成模板的更多相关文章

  1. Java代码实体类生成SQL语句(Java实体类转数据库)

    有的时候把数据库删了,如果照着实体类重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体类转换为SQL语句输出为一个文件,打开执行命令即可. 下载:ht ...

  2. 通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句

    参考: https://blog.csdn.net/qq465235530/article/details/68064074 https://www.cnblogs.com/zj0208/p/6008 ...

  3. 用MyEclipse自动生成hibernate映射文件和实体类

    创建数据库,创建相应的表 点击图标,选择MyEclipse Datebase Explorer 右击空白区域,选择new菜单,根据提示创建数据库连接,创建好后会显示你所创建的连接名,如图mysqldb ...

  4. 生成 hibernate 映射文件和实体类

    创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤   创建数据库,创建 ...

  5. 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭。

    错误:由于启动用户实例的进程时出错,导致无法生成SQL Server的用户实例. 原因:添加安装SQLEXPRESS时,估计装在了不同的目录下: 解决方法:关闭Sqlserver及相关的程序,删除目录 ...

  6. 利用PowerDesigner绘制PDM生成SQL Server数据库

    PowerDesigner是个很强大的建模工具,可以利用它绘制各种图形,本文利用该工具绘制PDM,进而生成SQL Server数据库. 比如绘制一个简单的学生选课.教师授课管理系统的PDM: pk表示 ...

  7. 11、SQL Server 视图、数据库快照

    SQL Server 视图 什么是视图? 视图是一个虚拟的表,内容源于查询的结果集.只有当视图上建立了索引后,才会具体化. 视图可以筛选和处理数据,而不是直接访问基础表.如:创建一个视图,只展示源表中 ...

  8. 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例

    /”应用程序中的服务器错误. 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例.请确保该用户在此计算机上有本地用户配置文件.该连接将关闭. 堆栈跟踪: [Sql ...

  9. 使用SQL Server视图的优缺点

    SQL Server视图我们经常会用的到,下面就为您介绍使用SQL Server视图的优缺点,希望可以对您SQL Server视图有更多的了解. 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避 ...

随机推荐

  1. 6.12-PrepareStatement,JdbcUtil 读取数据库配置文件properties,dao模式

    一.PrepareStatement 防止sql注入 PrepareStatement 是预编译sql语句 更加灵活,更有效率 executeUpdate() 做增删改 executeQuery() ...

  2. 运维不得不知的 Linux 性能监控、测试、优化工具

    Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的.简单的小工具.系统性能专家 Brendan D. Gregg 在 LinuxCon NA 2014 大会上 ...

  3. jq上下级元素查找方法

    1.parent([expr]) 获取指定元素的所有父级元素 2.next([expr]) 获取指定元素的下一个同级元素 3.nextAll([expr]) 获取指定元素后面的所有同级元素 4.and ...

  4. 粗解python的@classmethod和@staticmethod及普通实例方法

    引言: 使用不同的函数定义方法,可以使得函数定义更加有效而且易于维护 本文为博主原创,根据本人自己的理解整理而成,若有不准确的地方,希望能留言告知以免误导他人: 首先进一段代码,来直观感受一下不同类型 ...

  5. robot framework取出列表子元素

    取出嵌套列表变量的子元素 ${list}型列表: ${list} = [["A1", "first"], ["A2", "seco ...

  6. RabbitMQ-从基础到实战(4)— 消息的交换(中)

    转自:https://www.cnblogs.com/4----/p/6590459.html 1.简介 本章节和官方教程相似度较高,英文好的可以移步官方教程 在上一章的例子中,我们创建了一个消费者, ...

  7. ADO 读写文本文件

    ' 创建配置文件            Open ThisWorkbook.Path & "\schema.ini" For Append As #1            ...

  8. React Native指南汇集了各类react-native学习资源、开源App和组件

    来自:https://github.com/ele828/react-native-guide React Native指南汇集了各类react-native学习资源.开源App和组件 React-N ...

  9. Session保存数据

    int nameid=dao.isLegalUser(name, password);/ /方法返回int数据               request.setAttribute("nam ...

  10. scala--函数式对象

    函数式对象 这次写点关于函数式对象的吧 class Rational(n:Int, d:Int) { // n,d 为类参数,scala会创造出同样带有这两个参数的主构造器.如果这个类没有主体,可以不 ...