你好我是mvc的新手,所以我在数据库更新期间遇到了问题。我在数据库中有一个表,其中列被定义为唯一键,这意味着我不希望该列中的数据相同,但在输入相同数据时,我的数据访问层类会生成一个名为DbUpdate异常的异常。我只想通过发送消息“您的给定数据已存在”来处理此异常..请帮助我。提前完成。
答案 0 :(得分:1)
通常,您的想法是想要引发对每个层都有意义的自定义异常。这样做的原因是因为你想保留你的DAL摘要,例如,在你的DAL中你会捕获这个特殊的异常(DbUpdateException
)并引发你自己的自定义异常,例如。
try
{
...
myContext.SaveChanges();
}
catch (DbUpdateException ex)
{
throw new DuplicateDataException("Data already exists");
}
然后在您的业务层中,如果您想进一步抽象,可以抛出域异常
try
{
dataStore.Save(new Entity { ... });
}
catch (DuplicateDataException ex)
{
throw new DomainException(ex.Message);
}
然后最后在你的控制器中,将错误传递给视图
[HttpPost]
public ActionResult SomeAction(SomeModel model)
{
try
{
myDomain.Save(model);
return View("Success", model);
}
catch (DomainException ex)
{
return View("Error", ex.Message);
}
}
该示例当然完全是虚构的,可能适用于或不适用于您的特定代码库,但目标是演示异常如何从DAL层有效地“冒泡”回到您的UI。
我特别强调使用自定义异常,因为它为您提供了一个很好的清晰抽象。