Несколько вещей, которые нужно знать:
1. Единица работы
Единица работы не обязательно является своего рода реализацией для IUnitOfWork
. Это просто шаблон, который можно применять разными способами. Во-первых, и прежде всего - вы должны понять, для чего это нужно, прежде чем на самом деле его использовать, и слишком усложнять все вокруг. Более того, DbContext
API EF Code-First DbContext является своего рода шаблоном Unit of Work
. Ваши IDbSet<>
являются вашими хранилищами. Не пытайтесь абстрагироваться от своего ORM, начните с самой простой вещи.
2. Инъекция DbContext
Для начала просто вставьте DbContext в ваш контроллер с помощью инжектора конструктора. Не забудьте настроить контейнер IoC и подключить MVC DependencyResolver
. Ваш контроллер может выглядеть так (пример также содержит пример использования AutoMapper, см. Следующий пункт о ViewModels для этого):
public CustomerController : Controller
{
public CustomerController(MyDbContext data, IMappingEngine mapper)
{
Data = data;
Mapper = mapper;
}
public MyDbContext Data { get; set; }
public IMappingEngine Mapper { get; set; }
// Other controller code
}
3. Просмотр моделей
Это, опять же, шаблон, который так легко реализовать - просто наберите CustomerViewModel
и используйте AutoMapper , чтобы легко преобразовать ваш Customer
в CustomerViewModel
, чтобы вы могли сделать это следующим образом :
public ActionResult Details(int id)
{
var customer = Data.Customers.FirstOrDefault(c => c.Id == id);
if (customer == null)
return new HttpNotFoundResult();
return View(Mapper.Map<CustomerViewModel>(customer));
}
Вы можете опросить веб-сайт AutoMapper о том, как подключить его и запустить.
Обратите внимание, что вы не получаете ViewModel напрямую от DbContext. Вместо этого вы получаете «сущность», которая затем преобразуется в соответствующую модель представления.
Надеюсь, это поможет!