Я не видел интерфейсов, используемых для развязки EF.Я знаю, что они используются для развязки с внедрением зависимостей, но, возможно, с EF слишком много происходит за кулисами, чтобы это работало (динамические прокси, обнаружение изменений).
Я бы предложил реализовать слой Repository..
Шаг 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<>
с тем, что эквивалентно в вашем новом DAL.Это может быть или не быть хитрым, в зависимости от формы нового DAL.
Я следовал этому типу процесса - начал с сериализированного XML DAL, переместил его в EF, реорганизовал одну таблицу обратно в локальный XMLфайл, и следующим шагом будет рефакторинг другой таблицы в веб-службу на ESB.
BTW , вы упомянули замену EF на SQL для повышения производительности.Мы обнаружили, что EF медленный для массовых вставок, потому что он использует стиль строка за строкой.
Чтобы обойти это, я реализовал SqlBulkCopy в репозитории на основе EF (вместо оптовой замены EF, которая имеет другие функциинам очень понравилось).Это быстро, но требует времени, чтобы собрать воедино.