我有一个用户表,该表对用户名具有独特的约束(出于明显的原因)。

我正在使用EF 4.0 DAL来填充数据库,并且在编码CreateUser()方法的过程中。

是吗...

  1. 如果我尝试插入已经存在的用户名,最好抓住抛出的sqlexception。
  2. 在尝试将其插入数据库之前,明确检查用户名吗?

如果您还可以给出原因的原因,那就太好了!

有帮助吗?

解决方案

我会检查记录是否首先存在。唯一的密钥约束对于防止您的应用程序首先允许“不良数据”的方式来保护可能的方式很有用,但对此却不是主要停止。在可能的情况下,使用异常作为控制流机制(在这种情况下验证)通常是一个坏主意。

编辑:为了避免混乱,我并不是说根本没有独特的索引。它应该在那里,但不应该是检查独特性的主要手段。

其他提示

我会说最好处理例外。该数据库旨在处理用户名的唯一性,因此我想它可以比您更有效地做到这一点。它还为您的系统增加了便携性和内聚力。如果您在多个地方添加用户,则必须复制用户名检查或创建方法,基本上您最终会重写数据库引擎已经编写的内容。

除了塞缪尔(Samuel)所说的话,您还需要确保没有人进入在支票之间与您的检查并将记录添加到数据库之间的记录。您可以通过锁来实现这一目标,但是随后您必须捕获由锁引起的异常。

至于重复业务规则和数据库中的内容,我赞成数据库随同需要进行的任务,即使这确实在业务层中复制了一些东西,也要对此进行批准。您的数据库越紧密地锁定了无效数据越好。它可以保护您免于通过其他工具以外的其他工具访问数据库,例如,使用SSMS在数据库中进行更改以纠正用户报告的数据问题的支持人员。

我第二次说什么。最有效的方法是将其留在数据库中。所有其他选项都是更多的时间和资源。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top