如何使用c#类定义使用codesmith生成代码

时间:2016-03-10 06:14:29

标签: class code-generation codesmith

因为我总是使用db table作为codesmith的源代码, 但目前我没有表定义,只是类定义, 例如:

   public class RespObj
    {
        public string Status { get; set; }
        public string Msg { get; set; }
        public object Resp { get; set; }
        public string ErrCode { get; set; }
    }

上面的代码使用c#,而不是db表,如何使用codesmith来做这件事?

1 个答案:

答案 0 :(得分:0)

这是CodeSmith的主要用例之一。 我在VB中编写此TEMPLATE,但它可用于生成任何类型的文件。 Codesmith可以使用C#,随意将其转换为C#,相当直接的练习

第一部分定义了必须引用的一些程序集。 然后,Imports允许模板引用那些程序集

属性'SourceTable'是魔术发生的地方。第一次编译表时,点击F4,将出现模板属性屏幕。

单击SourceTable行右侧的elipses'...'并指向您的数据库和表格。 您需要定义一个新的DataSource,这需要一个连接数据库的字符串。

一个例子是

Data Source=DEVMACHINE;Initial Catalog=MyDB;Persist Security Info=True;User ID=myUserId;Password=myPassword

这将帮助您入门。在例程DeclarationFromColumn中,您将要从SQL服务器类型声明一个c#类型。

对我有用的是拿一个你已经拥有的完整的工作班,将其粘贴到模板中,然后开始寻找贯穿所有领域的地方。

在每个实例中,编写一些模板代码来生成该列表。

所有功能都需要放在<Script></Script>标签中。

<%@ Template Language="VB"%>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="CodeSmith.BaseTemplates" %>
<%@ Assembly Name="System.Data" %>

 <%@ Import Namespace="SchemaExplorer" %>
 <%@ Import Namespace="System.Data" %>

    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table to get the data from." %>

<% dim i as integer %>

 public class RespObj
    {
    <% for  i = 0 to  SourceTable.Columns.Count - 1  step 1 %>
            <%= DeclarationFromColumn(SourceTable.Columns(i))  %>
    <% next %>

      } 

  <script runat="template">
    function DeclarationFromColumn(clm as ColumnSchema) as string

        return "public " & clm.NativeType & " " & clm.Name & " {get; set;}"

    end function 

    </Script>