【发布时间】:2011-11-18 08:51:16
【问题描述】:
我正在开发我的第一个真正的 asp.net Web 应用程序,但我对捕获和处理违反数据库约束的最佳位置和方法感到困惑。假设我对列有唯一约束,并且用户输入了违反该唯一约束的内容。我是通过调用数据库来检查该列的值是否存在,在业务层中捕获它,还是让它一直到数据库并让它抛出异常并在我的应用程序中处理它?
我不喜欢后一个答案——因为在业务层到达数据库之前尽可能多地处理它是有意义的。但这也有点问题,因为我的应用程序是由在所有表上实现基本 CRUD 操作的过程驱动的。因此,为了在业务层中强制执行唯一性,我需要为每个可能的约束创建一个过程,以便在更新或插入之前进行查找。这似乎很乏味......而且我正在复制数据库和业务层中都存在的业务规则,所以如果发生变化,我不仅必须更改数据库,而且我必须更改程序和应用代码。
那么是否有正确的方法或好方法可以在应用程序代码中强制执行这些数据库约束,或者我应该寻找一种方法来捕获数据库抛出的异常并以用户友好的方式呈现它们?
【问题讨论】:
-
感谢您的快速回复。考虑到无论如何我都必须返回数据库来检查唯一性,这确实是有道理的。猜猜接下来要做的是弄清楚如何处理数据库异常并以用户友好的方式呈现它们,并且不会向用户暴露太多信息。
-
关键是要接受 DBMS(顺便说一下,不是“数据库”)是“业务层”的概念。谷歌搜索 Toon Koppelaars 的“赫尔辛基宣言”。他有我见过的最好的解释为什么这是最好的选择。
标签: asp.net vb.net exception-handling constraints