Я не видел Интерфейсы используются для развязывания EF. Я знаю, что они используются для развязки с инъекцией зависимостей, но, возможно, слишком много происходит с EF за кулисами, чтобы это работало (динамические прокси, обнаружение изменений).
Я бы предложил реализовать слой репозитория.
Шаг 1
Начнем с простейшей модели - модели (Человек и книги) в домене и EF в DAL слоя, используя стандартную процедуру EF для кода первой. EF реализует функции репозитория в DbSet<Person>
и DbSet<Book>
(но, конечно, этот тип репозитория заблокирован в EF).
Сделайте приложение для работы с приложениями с этим шаблоном, вы можете быстро продемонстрировать функциональность. Это позволяет сосредоточиться на логике приложений и не слишком беспокоиться о сохранении.
Шаг 2
Поместите репозиторный класс или классы между доменом и DAL. Замените вызовы домена на DbSet<Person>
и DbSet<Book>
с звонками в IQueryable<Person>
и IQueryable<Book>
в репозитории. Коллекции хранилищ первоначально просто указывают на коллекции EF DbSet<>
.
Внесите Save() в репозиторий. Первоначально он просто вызывает DbContext.SaveChanges().
Проверка функциональности остается неизменной.
Шаг 3
Заменить источник хранилища IQueryable<>
«s с любой равносильна в новом DAL. Это может быть или не быть сложным, в зависимости от формы нового DAL.
Я следил за этим процессом - начал с XML-сериализованного DAL, переместил его в EF, реорганизовал одну таблицу обратно в локальный XML-файл, а следующим шагом будет реорганизация другой таблицы в веб-службу на ESB.
BTW, вы упомянули о замене EF на SQL для производительности. Мы обнаружили, что EF замедляется для объемных вставок из-за стиля строки за строкой, который он использует.
Чтобы обойти это, я внедрил SqlBulkCopy в репозиторий, основанный на EF (вместо оптовой замены EF, который имеет другие функции, которые нам действительно понравились). Это быстро, но требуется время, чтобы скомпоновать.
Я не думаю, что DAL должен реализовывать интерфейс домена. – Jodrell
@Jodrell http://dotnetslackers.com/articles/aspnet/Building-a-StackOverflow-inspired-Knowledge-Exchange-Three-Tiers-to-MVC-Hooray-Reversing-Dependencies.aspx говорит, что вам нужно удалить зависимости EF/L2SQL – Julian
Является ли домен BLL или моделью? – Jodrell