Entity Framework Code Первая оболочка или репозиторий?

Я видел, как иногда упоминалось, что шаблон репозитория встроен в Entity Framework Code First через объекты DbSet и DbContext.

Однако это оставляет несколько проблем:

1) Инъекция - трудно ввести, так как нет четкого интерфейса

2) Издевательство — то же, что и выше

3) Несколько ссылок на EnitityFramework.dll. Допустим, я сначала создаю свой код в своей собственной сборке/проекте, а затем хочу сослаться на то, что в другом месте я также должен ссылаться на entityFramework.dll без какой-либо оболочки.

Согласны ли вы с этим и какое решение вы считаете лучшим?


person Ingó Vals    schedule 04.10.2011    source источник


Ответы (1)


  1. DbSet имеет интерфейс, и вы обычно реализуете свой собственный класс контекста, производный от DbContext, поэтому он также может реализовать ваш собственный интерфейс, позволяющий без проблем справляться с внедрением.
  2. Это более сложный вопрос. Имитация контекста не имеет смысла, имитация IDbSet также не имеет смысла, но в то же время не имеет смысла имитировать любой репозиторий или оболочку, выставляющую IQueryable или принимающую Expression<Func<>>, переданную в Linq-to-entities (здесь простой пример, почему). Так что да, репозиторий может справиться с этим, но вам придется приложить больше усилий, и вы не будете использовать Linq для запроса базы данных из кода, вызывающего ваш репозиторий. Если вы хотите, чтобы ваш верхний уровень использовал декларативные запросы (как ожидается при использовании репозитория), вы должны реализовать свои собственные спецификации.
  3. Imho, если у вас нет EntityFramework.dll в GAC, и вы будете ссылаться на свою первую сборку из нового решения, вы все равно добавите ссылку на EntityFramework.dll, чтобы убедиться, что она развернута с вашим кодом. В противном случае вы правы. Без обертки вам нужна ссылка.
person Ladislav Mrnka    schedule 04.10.2011
comment
Хорошие моменты: во время разработки мне нравится указывать только на прямые зависимости, поэтому меня беспокоит EF.dll. - person Ingó Vals; 05.10.2011
comment
Как насчет обработки исключений и пользовательских исключений. Не уверен в обработке исключений БД в каждом вызове. - person Ingó Vals; 07.10.2011