Никогда не выбрасывайте HttpException
из хранилища ... это неправильный уровень абстракции.Если вы не хотите, чтобы ваш репозиторий возвращал null
, выполните что-то вроде этого:
// CONTROLLER
public ActionResult Edit(int categoryId, int id)
{
try {
Product target = Products.GetById(id);
}
catch(ProductRepositoryException e) {
throw new HttpException(404, "Product not found")
}
return View("Edit", target);
}
// REPOSITORY
public Product GetById(int id)
{
Product target = context.Products.FirstOrDefault(x => x.productId == id);
if (target == null) throw new ProductRepositoryException();
return target;
}
Ваш репозиторий не должен ничего знать о HTTP, но ваш контроллер может знать о репозитории.Таким образом, вы выбрасываете исключение хранилища из хранилища и «переводите» это в исключение HTTP в контроллере.