C # Использование T4 для генерации перечислений - PullRequest
1 голос
/ 12 октября 2010

В моем проекте я хотел бы использовать T4 для генерации моих перечислений. Чтобы проверить это, я создал тестовый проект с простой формой. В этом проекте я добавил файл .tt и поместил свой код в этот файл.

Все работает, но я был немного разочарован. Я думал, что когда проект будет выполнен, T4 генерирует перечисление. Таким образом, перечисление всегда актуально. Но это не так, верно? Если вы хотите, чтобы перечисление было обновлено, вы должны сделать это вручную и перестроить свое решение. Мой вопрос, я прав в этом? Или я что-то пропустил.

Во-вторых, почему я должен использовать T4 для создания enum? Я имею в виду, что если enum меняется, я должен перестроить свое решение.

EDIT: Я получаю значения enum из таблицы базы данных. В таблице только 2 поля: Id и Description

Ответы [ 4 ]

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

Ваша таблица не является фактическим enum эквивалентом

Если ваша таблица меняет свои значения, на самом деле это не хороший претендент на то, чтобы стать enum, не так ли?Перечисления в C # имеют тенденцию быть статически определенными и не изменяются, если нет причин для этого.И когда они это сделают, код должен принять это изменение, чтобы использовать дополнительные значения.

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

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

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

switch (enumValue)
{
    // ...
    default:
        throw new InvalidOperationException(
            "The enum value " + enumValue + " is unhandled."
        );
}
0 голосов
/ 13 марта 2011

PLINQO может генерировать перечисления из одной таблицы довольно легко, но вы застряли с LINQ-TO-SQL. Хорошо, если вам нужны только сгенерированные перечисления!

0 голосов
/ 29 декабря 2010

Вот статья о том, как идти в другом направлении (создание перечисления c # из представления SQL)

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

...