Как создать собственный инструмент для генерации кода в Visual Studio 2010? - PullRequest
3 голосов
/ 27 марта 2012

Я просто хочу создать класс с атрибутами из таблицы базы данных .

Если у меня есть таблица базы данных, подобная следующей:

+-------------------+
| Id | Name         |
+----+--------------+
| 1  + foo          |
| 2  + hello.world  |
| 3  + null         |
+-------------------+

Я хотел бы автоматически сгенерировать a class, что будет выглядеть следующим образом:

class MyTable {
  public static int Foo = 1;
  public static int HelloWorld = 1;
  // null was omitted for Id = 3
}

Ответы [ 3 ]

4 голосов
/ 27 марта 2012

Вы можете использовать преобразование T4, чтобы сделать работу. Используйте «Добавить новый элемент» и «Текстовый шаблон».

Язык T4 - это способ использования кода C # для генерации кода C #. Большая часть текста анализируется непосредственно в выходном файле, и новый код может быть записан внутри тегов <# и #>. Файл начинается с упакованного импорта и использования операторов, поэтому очень простой шаблон может выглядеть примерно так:

   <#@ template debug="false" hostspecific="false" language="C#" #>
   <#@ import namespace="System.Data" #>
   <#@ import namespace="System.Data.SqlClient" #>
   <#@ assembly name="System.Data" #>

   namespace Some.Namespace
   {
       public class TestClass 
       {
    <# 

    using(var cnn = new SqlConnection(@"server=.\sqlexpress;Integrated Security=SSPI;Database=ApplicationManagement"))
    {
        cnn.Open();
        var cmd = new SqlCommand("SELECT TextKey, TextValue FROM TblBrandingKeyValues WHERE BrandingIdentifier = 'Default'", cnn);

        var reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            var defaultText = reader.GetString(1);
            var name = reader.GetString(0);


    #>
    public string <#= name #> 
    {
        get { return "<#= defaultText #>"; } 
    }

    <#
        }
    }

     #>

    }
}

} <# @ output extension = ". cs" #>

Этот шаблон создаст класс TestClass с набором свойств только для чтения, извлеченных из таблицы базы данных TblBrandingKeyValues.

Я бы порекомендовал эти T4 руководства .

0 голосов
/ 27 марта 2012

Использовать Шаблоны T4 . Я создаю много классов таким образом.

0 голосов
/ 27 марта 2012

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

больше информации по ссылке ниже:

http://msdn.microsoft.com/en-us/library/ms404245.aspx

Имейте в виду, что .NET уже предлагаетмного встроенного инструмента / пространства имен, которое выполняет ту же самую работу (например, используя Entity Framework)

...