Я пытаюсь использовать Шаблон Репозитория с EF4 с помощью VS2010.
С этой целью я использую ПОСТЕПЕННО генерацию кода путем щелчка правой кнопкой по разработчику модели объекта и нажатия на объект генерации кода Add. Я затем выбираю шаблон POCO и получаю мои классы.
То, что я хотел бы смочь сделать, структурировали мое решение в отдельные проекты для Объекта (ПОСТЕПЕННО) классы и другой проект для модели объекта и кода репозитория.
Это означает, что мой проект MVC мог использовать ПОСТЕПЕННО классы для представлений со строгим контролем типов и т.д. и не иметь, чтобы знать о репозитории или иметь, чтобы иметь ссылку на него.
Для включения всего этого вместе, я буду иметь другой отдельный проект с интерфейсами и использовать МОК.
Звуки, хорошие в моей голове, которую я просто не знаю, как генерировать классы в их собственный проект! Я могу скопировать их и затем изменить пространства имен на них, но я хотел избежать физического труда каждый раз, когда я изменяю схему в дб и хочу обновить свою модель.
Спасибо
Фактически T4 шаблоны в EF 4.0 были разработаны с учетом этого сценария :)
Есть 2 шаблона:
Вы должны поместить файл ModelName.tt в свой проект POCO и просто изменить шаблон так, чтобы он указывал на файл EDMX в проекте, поддерживающем постоянство.
Звучит странно, я знаю: теперь существует зависимость, но она происходит во время генерации T4, а не во время компиляции! И это должно быть хорошо? Потому что результирующая сборка POCO все еще полностью игнорирует персистентность.
См. Шаги 5 и 6 из этого: http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx для получения дополнительной информации.
Надеюсь, это поможет
Алекс
@Nick,
Еще одно замечание по поводу ссылки, которую дал Алекс. Как только я переместил свой основной файл .tt в другой проект, файл, созданный из файла «.Context.tt "не мог компилироваться, потому что в нем отсутствовали ссылки на файлы POCO, которые были расположены в другом пространстве имен (потому что я хотел, чтобы мой ObjectContext находился в другом домене, чем мои файлы POCO). Мне пришлось изменить" .Context.tt "файл, чтобы иметь с использованием Poco.Namespace
(где Poco.Namespace
- имя пространства имен, в котором были созданы файлы POCO). Это позволило моему проекту скомпилировать.
Джоэл