EF 4.1 DbContext Generator - Поместить сущности в другой проект? - PullRequest
7 голосов
/ 14 июня 2011

Как часть нашей прикладной архитектуры, нам нравится определять четкие линии между нашими функциональными уровнями.Поэтому типичное прикладное решение будет содержать:

  • Entity
  • Модель
  • Задача
  • Presenter
  • FrontEnd

В конечном итоге это совершенно разные сборки.

Разграничение сущности / модели делается для того, чтобы функциональность доступа к базе данных находилась на отдельном уровне от наших POCO, так что только Модель когда-либо должна знать о моделив то время как все до Presenter знают о Entity

. Это хорошо работает при использовании Code-First или Fluent-API - но из-за отсутствия поддержки SPROC в этих парадигмах, получается, что в EF 4.1 I должен использовать модели EDMX.

Итак - я генерирую POCO с помощью генератора DbContext, но результирующие классы попадают в .Model, и хотя я могу вместо этого принудить их пространство имен в .Entity, они все еще живут в сборке .Model, котораяозначает, что .Presenter должен ссылаться на .Model, чтобы получить доступ к классам, которые должны быть в .Entity.

Есть ли способ заставить или обмануть EF, чтобы выгрузить сгенерированный вывод в другой проект?

1 Ответ

16 голосов
/ 15 июня 2011

Конечно. DbContext Generator - это всего лишь два шаблона T4. Вы можете переместить шаблон, генерирующий сущности, в другой проект. Вам просто нужно изменить шаблон, чтобы он указывал на правильный файл EDMX. Это по умолчанию:

string inputFile = @"Model.edmx";

Вы должны изменить его на относительный адрес к вашему файлу EDMX. Это будет что-то вроде:

string inputFile = @"../Model/Model.edmx"

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

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

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