Использование шаблона репозитория с подходом EF 4.1 Database First - PullRequest
2 голосов
/ 07 ноября 2011

Возможно ли это?

Есть ли примеры?Пока что мои поиски оказались бесплодными ...

Причина, по которой я использую этот подход, заключается в том, что мне приходится придерживаться устаревшей базы данных для моего приложения MVC 3, но есть некоторые довольно сложные ассоциации и иерархии наследования, поэтому яхочу, чтобы EF генерировал сопоставления вместо того, чтобы я делал это вручную.Я хочу использовать шаблон Repository для модульного тестирования.Любой совет приветствуется.

Ответы [ 3 ]

3 голосов
/ 07 ноября 2011

Ваш поиск станет плодотворным, если вы просто поищете «Шаблон репозитория Entity Framework 4.1» или что-то еще и забудете термин «База данных сначала».Не имеет значения, пишете ли вы свои классы вручную (сначала код) или генерируете их с помощью генератора DbContext (база данных / модель сначала).В конце концов, ваш репозиторий будет использовать эти классы.Не существует генератора, который также написал бы для вас значимый репозиторий - кроме DbSet вашей модели, которые являются специализациями универсальных репозиториев.Вы должны написать его вручную, основываясь на классах моделей и потребностях своего бизнеса.

Таким образом, это не повлияет на дизайн хранилища, независимо от того, используете ли вы Code First или Database / Model First.

О шаблоне репозитория с EF и модульном тестировании Я рекомендую прочитать это как предупреждение и отправную точку и следовать множеству ссылок в этом ответе:

Шаблон репозитория с Entity Framework 4.1 и Parent /Отношения с детьми

2 голосов
/ 10 ноября 2011

Вы по-прежнему можете использовать стиль Code-first, если хотите: code-first позволяет вам выполнить реинжиниринг из существующей базы данных, чтобы начать работу.Или, если у вас уже есть EDMX, вы можете сгенерировать классы с первым кодом с помощью шаблона T4 (упакованного в EF 4.1).Или, опять же, используйте шаблоны T4 для генерации POCO и сохраняйте базу данных в первую очередь как стратегию.

Но я думаю, что вы все еще можете легко получить шаблон хранилища даже в стиле базы данных.Я думаю, что ваша основная проблема будет в зависимости от некоторых DLL-библиотек структуры сущностей, если вы это сделаете (что вы можете решить, это не проблема).

0 голосов
/ 06 августа 2014

Я знаю, что этот пост опоздал на день и, вероятно, на доллар.Но мне повезло, что до сих пор я реализовал шаблон репозитория в базе данных, создав экземпляр моего DbContext в моем контроллере и передав его в мой экземпляр репозитория.Затем я убедился, что мои методы в моих репозиториях возвращают тип объекта my при необходимости.

Я столкнулся с двумя основными проблемами при использовании репозитория таким способом.Во-первых, у меня была проблема со стандартным методом Dispose на моих контроллерах.Поскольку я вызывал DbContext в своем репозитории, мне пришлось унаследовать IDisposable и реализовать там метод Dispose.Я использовал этот урок как пример этого http://csharppulse.blogspot.in/2013/09/learning-mvc-part-6-generic-repository.html

Следующая проблема, с которой я столкнулся, была, когда пришло время обновить мои объекты.Поскольку я перешел в DbContext, мои объекты уже существовали.Поэтому мне пришлось смоделировать свой метод обновления с помощью логики, которая смотрела, чтобы увидеть, существует ли он уже.Я использовал эту статью, чтобы помочь с этим Объект с таким же ключом уже существует в ObjectStateManager.ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом

...