T4 для генерации Enum из табличных значений SQL Server - PullRequest
1 голос
/ 12 октября 2010

То, чего я хочу достичь, более или менее противоположно этому:

http://www.olegsych.com/2008/07/t4-template-for-generating-sql-view-from-csharp-enumeration/

У меня есть таблица групп значений (имена перечислений) и таблица значений (значения перечислений), и я хочу превратить их в перечисления. Оба находятся в SQL Server, и оба действительно находятся в .edmx (так что было бы довольно много способов прочитать значения).

Есть ли что-то "там", которое уже делает это (а я не нашел это)? Если нет, то как лучше всего читать данные (SMO, EDMX с динамической загрузкой, ...)

Ответы [ 2 ]

3 голосов
/ 08 января 2011

Я приложил еще больше усилий для написания такого шаблона , чтобы он делал все это:

  • генерирует значения перечисления с явными целочисленными значениями;
  • использует соглашение об именах пространства имен Visual Studio, поэтому сгенерированные перечисления имеют пространство имен проекта по умолчанию с добавленными подпапками (как и любой файл кода в Visual Studio);
  • добавляет полную XML-документацию перечисления с использованием значений столбцов таблицы дополнительного описания; если у вас их нет, не обращайте внимания;
  • правильно называет сгенерированный файл и добавляет в код дополнительный атрибут, чтобы сгенерированный enum не анализировался при анализе кода;
  • Значения таблицы поиска в нескольких словах правильно объединяются в эквивалентные символы в паскалях (т. Е. Значение из нескольких слов становится MultiWordValue);
  • значения перечисления всегда начинаются с буквы;
  • все значения перечисления состоят только из букв и цифр, все остальное исключается;

Во всяком случае. Все очень хорошо задокументировано в этом посте .

0 голосов
/ 12 октября 2010

Хорошо, вот как я это реализовал:

  • Используйте VolatileAssembly из T4 Toolbox для ссылки на сборку, которая ...
  • Реализует класс T4 Helper, который выполняет всю работу с базой данных (при использовании EF обязательно используйте строку подключения при создании экземпляра контекста)
  • В .tt просто вызовите вспомогательный класс T4, чтобы получить необходимые данные и создать свой класс (ы)
...