Entity Framework Code Первая оболочка или хранилище? - PullRequest
0 голосов
/ 04 октября 2011

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

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

1) Впрыск - сложно ввести, так как нет четкого интерфейса

2) Насмешка - как и выше

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

Согласны ли вы с этим и что, по вашему мнению, является лучшим решением, если вы это сделаете?

1 Ответ

2 голосов
/ 04 октября 2011
  1. DbSet имеет интерфейс, и вы обычно реализуете свой собственный класс контекста, полученный из DbContext, поэтому он также может реализовывать ваш собственный интерфейс, позволяющий вам без проблем работать с инъекцией.
  2. Это более сложный вопрос. Мокрый контекст не имеет смысла, мошенничество IDbSet также не имеет смысла, но в то же время дразнить любой репозиторий или оболочку, выставляя IQueryable или принимать Expression<Func<>>, переданный Linq-to-entity, не имеет смысла либо ( здесь - простой пример того, почему). Да, репозиторий может справиться с этим, но вам придется приложить больше усилий, и вы не будете использовать Linq для запроса базы данных из кода, вызывающего ваш репозиторий. Если вы хотите, чтобы ваш верхний уровень использовал декларативные запросы (как и ожидалось при использовании репозитория), вы должны реализовать свои собственные спецификации.
  3. Imho, если у вас нет EntityFramework.dll в GAC и вы будете ссылаться на свою первую сборку из нового решения, вы все равно добавите ссылку на EntityFramework.dll, чтобы убедиться, что она развернута с вашим кодом. В противном случае вы правы. Без обертки вам нужна ссылка.
...