Ну, на самом деле, если вы думаете об этом, Контроллеры должны работать с единицей работы.
Как правило, в приложении ASP.NET MVC Контроллеру назначается новый модульработы, когда приходит HTTP-запрос.
Затем контроллер будет вызывать методы службы (которая вызывает методы в репозитории), извлекая и внося изменения во внутренний граф / память Entity Framework.
Когда контроллер выполнит то, что ему нужно, он выполнит «Фиксацию» на единицу работы, что приведет к любым изменениям в базовом репозитории, которые будут зафиксированы в базе данных.
Я предполагаю, что когдавы говорите о «Сервисе», у вас есть промежуточный уровень между вашим Контроллером и Репозиторием, где Контроллер общается только со Службой, затем Служба общается с Репозиторием, а затем создает резервную копию стека приложения.ваш контроллер может выглядеть следующим образом:
public class ProductsController : Controller
{
private IUnitOfWork _unitOfWork;
private IProductsService _service;
public ProductsController(IUnitOfWork unitOfWork, IProductsService service)
{
// use dependency injection here
_unitOfWork = unitOfWork;
_service = service;
}
[HttpPost]
public ActionResult SubmitOrder(Product p)
{
var existingProduct = _service.FindById(p.ProductId);
UpdateModel(existingProduct);
_unitOfWork.Commit();
}
}
В большинстве сценариев EF4 единица работы реализована как оболочка дляObjectContext.Другими словами, метод «Commit» в вашей единице работы будет просто выполнять «SaveChanges» для ObjectContext.
Следовательно, единица работы на самом деле не указывает наслужба или хранилище.Он просто работает с механизмом сохранения, который управляет.