Как использовать определение класса C# для генерации кода с использованием CodeSmith

Так как я всегда использую таблицу БД в качестве источника для codemith, но в настоящее время у меня нет определения таблицы, просто определение класса, например:

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

Приведенный выше код с использованием C#, а не таблицы БД, как использовать Cossmith для этого?

1 ответ

Это один из основных вариантов использования CodeSmith. Я пишу этот шаблон в VB, но он может быть использован для создания любого файла. Codesmith может использовать C#, не стесняйтесь конвертировать это в C#, довольно простое упражнение

Первая часть определяет некоторые сборки, на которые нужно ссылаться. Затем импорт позволяет шаблону ссылаться на эти сборки

Свойство SourceTable - это место, где происходит волшебство. Когда вы компилируете таблицу в первый раз, нажмите F4 и появится экран свойств шаблона.

Нажмите elipses "..." справа от строки SourceTable и укажите на свою БД и таблицу. Вам нужно будет определить новый источник данных, для этого потребуется строка подключения к вашей базе данных.

Примером является

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

Это поможет вам начать. В процедуре DeclaFromColumn вы хотите объявить тип aC# из типа сервера SQL.

Что мне помогло, так это взять полный рабочий класс, который у вас уже есть, вставить его в шаблон, а затем начать искать места, где вы проходите через все поля.

В каждом из этих случаев напишите некоторый код шаблона, чтобы сгенерировать этот список.

Все функции должны идти в <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>
Другие вопросы по тегам