1

您好,我是 mvc 的新手,所以在数据库更新期间遇到问题。我在数据库中有一个表,该列被定义为唯一键,这意味着我不想在该列中使用相同的数据,但是在输入相同的数据时,我的数据访问层类会生成一个名为 DbUpdate 异常的异常。我只想通过发送消息“您的给定数据已存在”来处理此异常。请帮助我。提前谢谢。

4

1 回答 1

2

一般来说,这个想法是你想提出一个对每一层都有意义的自定义异常。这样做的原因是因为你想保持你的 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。

我特别强调使用自定义异常只是因为它为您提供了一个很好的干净抽象。

于 2013-11-01T10:20:07.563 回答