Как я могу изменить стратегию генерации кода по умолчанию для edmx? - PullRequest
9 голосов
/ 04 февраля 2011

Я хочу изменить стратегию генерации кода по умолчанию, как я могу это сделать?

Я просто хочу изменить имя класса с <#=code.Escape(container)#> на Entities и изменить строку подключения по умолчанию на name=Default.

(я не хочу создавать файл шаблона для проекта, я хочу отредактировать его, чтобы он работал глобально)

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

Обновление: я все еще не знаю, как это сделать.

Ответы [ 2 ]

5 голосов
/ 07 февраля 2011

Вы можете увидеть, что генерирует код, если щелкнуть файл EMDX и проверить свойства файла в Visual Studio.Ищите Custom Tool свойство, которое сообщит вам имя класса генератора, который преобразует EDMX XML в скомпилированный код.

Но что касается настройки модели, я все же рекомендую вам использовать T4, который принимает ваш EDMX и генерирует то же самоекод как оригинальный генератор.Хорошо, что вы можете манипулировать им до тех пор, пока не упадете замертво, если хотите.

И если вы намерены использовать T4 на нескольких EMDX в вашем проекте, тогда я предлагаю вам скорее создать файл .ttincludeи ссылаться на него в каждом .tt файле.Таким образом, вы будете повторно использовать существующий код, и когда вы его измените, он будет отражен во всех сгенерированных файлах.

Еще один вопрос: Что вы подразумеваете под глобально ?Глобально для всех файлов EDMX в вашем проекте или для всех файлов EDMX на вашем компьютере или всех файлов EDMX в вашей проектной команде или что?Определите глобально .

Дополнительное редактирование

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

Прежде всего: использование T4 позволяет корректировать EDMX -> изменения преобразования кода для проекта или лучше для каждого решения (все проекты в конкретном решении).В других проектах / решениях на той же машине вы должны включить ту же ссылку на шаблон T4.Так что на самом деле это не global в вашем смысле ...

Лучшее, что вы можете сделать, - это создать собственный шаблон элемента Visual Studio с этим шаблоном T4, чтобы было намного прощедобавив этот шаблон T4 по умолчанию в ваши решения / проекты.Это настолько глобально, насколько вы можете сделать это с помощью T4.

Возможно, вам следует прочитать эту запись MSDN, в которой говорится о вашем виде настройки:
Как: настроить генерацию кода на уровне объекта (данные объекта)Модельер)

1 голос
/ 07 февраля 2011

Я не знаю, возможно ли вообще изменить генерацию кода по умолчанию.

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

Что-то вроде:

<#=Accessibility.ForType(container)#> partial class Entities : <#=code.Escape(container)#>
{
    public Entities()
        : base("name=Default")
    { }
}

Недостатком этого подхода является необходимость развертывания этого .tt файла с каждым созданным вами EDMX.


Однако в архитектуре надстроек Visual Studio вы можете изучить создание шаблона, который создает EDMX и этот файл .tt по умолчанию. В качестве замены для добавления простой «Модель данных сущности ADO.NET»


Глядя на EntityModelCodeGenerator (пользовательский инструмент, который запускается стратегией codegen по умолчанию), кажется, что он зарегистрирован с помощью механизма расширяемости SingleFileGenerator, который является COM-компонентом. Дополнительная информация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...