0

Я определил свои интерфейсы на уровне инфраструктуры, чтобы использовать Injection Dependency, но теперь проблема, как я могу решить зависимость DBContext с использованием интерфейса, не добавляя ссылки на EF dll, в уровень инфраструктуры и сервис слой.Удалить муфту для слоя EF DBContext и инфраструктуры

ответ

2

Если вам нужно полностью скрыть EF от вашего приложения, вам нужно будет использовать repository pattern, скрыть EF за вашими репозиториями и сгенерировать (или написать) объекты POCO.

Если вы более прагматичны, вы можете use generic repositories with IQueryable support, что позволяет отлично развиваться и тестировать единицы измерения, но что выбрать, зависит от вас.

0

Вы можете изменить файлы T4 (например, шаблоны T4 или файлы .tt) для создания интерфейсов вместе с контекстом и даже разделить их на отдельные файлы T4 для каждого из двух, чтобы вы могли разместить их в отдельных сборках. Вы также можете сделать контекст возвратом IQueryable вместо ObjectQuery, однако ...

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

Что вам нужно сделать, это реализовать службы, которые скрывают технологию DAL от слоев над ней, но внутри их реализации используют всю мощь EF для работы максимально эффективно.

Эти услуги можно издеваться, чтобы проверить слои над ними, а сами службы могут быть протестированы вместе с их использованием EF, используя тестовую БД (например, используя экземпляр LOCALDB, созданный и запущенный тестовым классом).

Несколько из многих звеньев: Релевент
Generic Repository With EF 4.1 what is the point
ASP.NET MVC3 and Entity Framework Code first architecture
Is UnitOfWork and GenericRepository Pattern redundant In EF 4.1 code first?
https://softwareengineering.stackexchange.com/questions/133448/unit-integration-testing-my-dal

Смежные вопросы