Как использовать определение класса 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>