Контекст Entity Framework? - PullRequest
       46

Контекст Entity Framework?

2 голосов
/ 04 марта 2011

Мне действительно трудно понять, где EF Context управляется в приложении MVC.

Я использую подход Service / Repository / EF и играю с шаблоном UnitOfWork с контекстом внутри него, а затем использую его внутри действий контроллера для использования различных сервисов. Это работает, но, делая это, я делаю контроллеры зависимыми от EF, верно?

Есть предложения?

Ответы [ 3 ]

1 голос
/ 04 марта 2011

Если вы полагаетесь на абстракции и создаете 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();
  } 
}

Конечно, вы должны убедиться, что ваши службы / репозитории используют тот же контекст, что и единица работы, введя в них тот же контекст.

0 голосов
/ 04 марта 2011

Проверьте пример кода на http://efmvc.codeplex.com/

0 голосов
/ 04 марта 2011

Это зависит от того, что вы имели в виду «сделать контроллер зависимым от EF»?

Используете ли вы какой-либо EF-связанный класс в контроллерах?Если нет, то они, очевидно, не зависят от EF, и вы легко можете поменять свои репозитории и единицы работы для другой реализации (например, с помощью NHibernate).

Но да, в целом ваше приложение asp.net mvc зависит от EF, еслиВы используете его в любом слое - он просто не будет работать без загрузки ELL DLL.

...