Генерируйте ПОСТЕПЕННО классы в другом проекте к проекту с моделью Entity Framework

Я пытаюсь использовать Шаблон Репозитория с EF4 с помощью VS2010.

С этой целью я использую ПОСТЕПЕННО генерацию кода путем щелчка правой кнопкой по разработчику модели объекта и нажатия на объект генерации кода Add. Я затем выбираю шаблон POCO и получаю мои классы.

То, что я хотел бы смочь сделать, структурировали мое решение в отдельные проекты для Объекта (ПОСТЕПЕННО) классы и другой проект для модели объекта и кода репозитория.

Это означает, что мой проект MVC мог использовать ПОСТЕПЕННО классы для представлений со строгим контролем типов и т.д. и не иметь, чтобы знать о репозитории или иметь, чтобы иметь ссылку на него.

Для включения всего этого вместе, я буду иметь другой отдельный проект с интерфейсами и использовать МОК.

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

Спасибо

44
задан Max 17 March 2010 в 18:36
поделиться

2 ответа

Фактически T4 шаблоны в EF 4.0 были разработаны с учетом этого сценария :)

Есть 2 шаблона:

  • Один для самих Сущностей (например, ModelName.tt)
  • Один для ObjectContext (например, ModelName.Context.tt)

Вы должны поместить файл ModelName.tt в свой проект POCO и просто изменить шаблон так, чтобы он указывал на файл EDMX в проекте, поддерживающем постоянство.

Звучит странно, я знаю: теперь существует зависимость, но она происходит во время генерации T4, а не во время компиляции! И это должно быть хорошо? Потому что результирующая сборка POCO все еще полностью игнорирует персистентность.

См. Шаги 5 и 6 из этого: http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx для получения дополнительной информации.

Надеюсь, это поможет

Алекс

39
ответ дан 26 November 2019 в 22:19
поделиться

@Nick,

  1. Чтобы принудительно восстановить объекты POCO, вам просто нужно щелкнуть правой кнопкой мыши основной файл .tt и выбрать «Запустить настраиваемый инструмент». Это заставит его регенерировать ваши классы POCO с вашими обновленными изменениями в модели .edmx.
  2. Есть ли какие-нибудь проблемы с тем, что вы продолжите и щелкните правой кнопкой мыши по модели и выберите «Создать базу данных из модели ...», даже если вы не обязательно создаете базу данных? Это, скорее всего, избавит вас от вашей «Ошибка 11007 ...».
  3. Я думаю, это эквивалент «скрытого кода». Больше я ничего не знаю.

Еще одно замечание по поводу ссылки, которую дал Алекс. Как только я переместил свой основной файл .tt в другой проект, файл, созданный из файла «.Context.tt "не мог компилироваться, потому что в нем отсутствовали ссылки на файлы POCO, которые были расположены в другом пространстве имен (потому что я хотел, чтобы мой ObjectContext находился в другом домене, чем мои файлы POCO). Мне пришлось изменить" .Context.tt "файл, чтобы иметь с использованием Poco.Namespace (где Poco.Namespace - имя пространства имен, в котором были созданы файлы POCO). Это позволило моему проекту скомпилировать.

Джоэл

5
ответ дан 26 November 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: