上一篇读取了一个表的内容,但是到了真正应用的时候还是不够用的,我们很容易可以对比出来,SQL里边的数据类型的定义和C#中有所不同,比如Saler--String,大写的String在C#中不是一个类型,所以在这里我们要进行转换一下,还有有的时候我们要加一些操作的逻辑,但这个逻辑不只在一个地方会使用到,这时候我们就可以建一个方法来调用。

在CodeSmith中创建方法要把方法放在<script runat="template">……</script>这个标签中,template我理解为运行在模板中的,所以他可以用来定义方法。如下方式:

<script runat="template">

public string Test()

{

return "测试";

}

</script>

这样就创建了一个Test的方法,调用的时候和之前一样使用<%= Test() %>,需要注意的是,这里括号后边没有分号,<%= Test(); %>是不对的。

下面是一个数据库类型转C#数据类型的方法,这个是从网上搜集来的。

/// <summary>
/// 将数据库类型转化为C#类型
/// </summary>
/// <param name="dbType">数据库类型</param>
/// <returns>C#类型</returns>
public string DataTypeToCSharpType(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 "TimeSpan";
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";
}
}

有了它我们就可以像这样调用了

<%foreach(ColumnSchema col in SourceTable.Columns){ %>

public <%= DataTypeToCSharpType(col.DataType) %> <%= col.Name %> { get;set; }

<% } %>

本篇示例模板:

<%--

Name: 测试模板3

Author: GodFinal

Description:

--%>

<%@ Template Language="C#" TargetLanguage="SQL" Description="连接SQL数据库,并读取表结构" Debug="True"%>

<%@ Assembly Name="SchemaExplorer" %>

<%@ Import Namespace="SchemaExplorer" %>

<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="表" Description="要操作的表" %>

using System;

namespace GodFinal

{

/// <summary>

/// <%=ClassName %>[实体]

/// </summary>

public class <%=ClassName %>

{

<%foreach(ColumnSchema col in SourceTable.Columns){ %>

public <%= DataTypeToCSharpType(col.DataType) %> <%= col.Name %> { get;set; }

<% } %>

}

}

<script runat="template">

/// <summary>

/// 将数据库类型转化为C#类型

/// </summary>

/// <param name="dbType">数据库类型</param>

/// <returns>C#类型</returns>

public string DataTypeToCSharpType(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 "TimeSpan";

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";

}

}

</script>

最终结果:

using System;

namespace GodFinal

{

/// <summary>

/// tb_sys_user[实体]

/// </summary>

  public class tb_sys_user

  {

public int id { get;set; }

public string CPlace { get;set; }

public string Saler { get;set; }

public string Company { get;set; }

public string Department { get;set; }

public string Account { get;set; }

public string telephone { get;set; }

public string email { get;set; }

public string Address { get;set; }

public string Zipcode { get;set; }

public string Level { get;set; }

}

}

CodeSmith使用总结--调用自定义方法的更多相关文章

  1. 开源项目asmjit——调用自定义方法demo以及windbg调试

    asmjit是一个开源项目,使用它可以将代码即时的编译成机器码,也就是所谓的jit技术. 初次接触这个项目,编写了一个demo,学习它的使用方法. 现将编写的demo以及调试jit生成的机器码的过程总 ...

  2. wx: wx.showModal 回调函数中调用自定义方法

    一.在回调函数中调用自定义方法: 回调函数中不能直接使用this,需要在外面定义 var that = this 然后 that.自定义的方法.如下: //删除 onDelete: function ...

  3. 关于jsp的action如何调用servlet的自定义方法

    一.起因: 希望将同属于某个模块的简单功能整合到一起,不创建太多的servlet 二.问题描述: action或者method属性是否能直接调用自定义方法 三.补充知识点: 查询得知:servelet ...

  4. [Unity3D]Unity+Android交互教程——让手机"动"起来

    想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是 ...

  5. Socket 类通信例子-第24章

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 慕课网-Java入门第一季-7-4 编程练习

    来源:http://www.imooc.com/code/1634 小伙伴们,请根据所学知识,参考注释,在代码编辑器中将代码补充完整.编写一个 Java 程序,实现输出学生年龄的最大值 要求: 1. ...

  7. 4、C#进阶:MD5加密、进程、线程、GDI+、XML、委托

    MD5加密 将字符串进行加密,无法解密.网上的解密方式也都是在库里找,找不到也没有. 1 protected void Page_Load(object sender, EventArgs e) 2 ...

  8. 小记初试tornado与ajax,一些注意点

    一. 在 tornado模板中使用自定义方法 在tornado中可以使用两种方式,达到在模板中调用自定义方法的效果,第一种是使用UIMethod 和UIModule. 1.UIMethod使用方法示例 ...

  9. 我的第一篇Markdown语法博客

    这是我的第一篇使用markdown语法编写的博客 使用的编辑器为Sublime Text2 并且使用了sublog插件, sublog是一个开源项目 sublog 并且参考了作者的博客 AmongOt ...

随机推荐

  1. wed网页开发面试笔试必备小知识

    HTML中行内元素与块级元素的区别: 在标准文档流里面,块级元素具有以下特点: ①总是在新行上开始,占据一整行: ②高度,行高以及外边距和内边距都可控制: ③宽带始终是与浏览器宽度一样,与内容无关: ...

  2. javascript sort 用法

    <html> <head> <title></title> <script type="text/javascript" sr ...

  3. hibernate连接数据库,进行操作的步骤

    //初始化 Configuration conf=null; SessionFactory sf=null; Session session=null; Transaction tx=null; tr ...

  4. 关于Xcode7的HTTP请求不到网络的问题

    ---恢复内容开始--- Xcode7发现网络请求失败, 其他一切都可以, 有网就是提示没有网络, 请求不到, 查询得知 iOS9引入了新特性 APP Transport Security (ATS: ...

  5. POJ2739 Sum of Consecutive Prime Numbers(尺取法)

    POJ2739 Sum of Consecutive Prime Numbers 题目大意:给出一个整数,如果有一段连续的素数之和等于该数,即满足要求,求出这种连续的素数的个数 水题:艾氏筛法打表+尺 ...

  6. 机器学习理论与实战(十)K均值聚类和二分K均值聚类

    接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...

  7. JSONP的客户端的具体实现

    JSONP的客户端的具体实现 1.远程调用一个js,代码如下:         <script type="text/javascript">         var ...

  8. Content-Disposition的作用及用法

    Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件.Content-disposition其实可以控制用户请求所得的内容存为一个 ...

  9. flask开发restful api系列(4)--七牛图片服务

    上一章我们讲到如何利用alembic来更新数据库,这章,我们讲如何通过七牛服务来存储图片. 像我们大多数公司一样,公司资金比较少,如果自己开发图片服务器,代价太大:如果我们用自己的网站服务器来保存图片 ...

  10. 创建区域Areas,添加TagHelper

    创建区域Areas,添加TagHelper 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在Asp.net Core VS2015中,我们发现还有很多不太简便的地方,比如右 ...