Если вы полагаетесь на абстракции и создаете IUnitOfWork и IRepository, инкапсулирующие контекст EF, контроллер будет зависеть от абстракций, а не от конкретной реализации.
Сами хранилище и единица работы являются единственными классами, которыебудет зависеть от Entity Framework или от того, какой ORM вы используете.
public class MyController : Controller
{
public MyController(IRepository r1, IRepository r2, IUnitOfWork uow)
{ ... }
[HttpPost]
public ActionResult SomeAction(Model data)
{
_r1.DoSomeChangesToEntities(data);
_r2.DoSomeChangesToEntities(data);
_uow.SaveChanges();
return View(...);
}
}
Редактировать согласно запросу:
Простая реализация Единицы работы может быть:
public class EFUnitOfWork : IUnitOfWork
{
private DataContext _context;
public EFUnitOfWork(DataContext context)
{
_context = context;
}
public void Commit()
{
_context.SubmitChanges();
}
}
Конечно, вы должны убедиться, что ваши службы / репозитории используют тот же контекст, что и единица работы, введя в них тот же контекст.