想象一个对象,其字段在数据库中不能具有重复值。我的第一直觉是创建一个可以作为数据注释应用于属性的唯一属性。此唯一属性将命中数据库并检查该值是否已存在。这在执行create方法时有效,但在更新时会失败。在更新时,我会为我的实体的每个唯一字段获取重复值错误,其值我不想更改。在ASP.NET MVC 2上以一种非常适合ModelState的方式实现这一目标的好方法或既定实践是什么?将我的对象的id传递给属性验证器可以通过检查找到的重复值是否与我正在更新的同一实体有效,但我不知道如何从验证器内部获取该数据。
请原谅我,如果这是一个愚蠢的问题,或者是否语法不一致。现在差不多凌晨3点,我从昨天早上开始编码。
答案 0 :(得分:2)
对于这种验证,我会让数据库做它已经做得很好的事情。确保您的数据库具有唯一约束,并在违反时向其报告错误。然后,您可以将错误添加到模型错误中(使用友好的一些文本,而不是仅仅修改SQL错误)。
如果您决定自己进行检查,可以通过排除当前记录来解决UPDATE问题......
SELECT COUNT(*)
FROM myTable
WHERE myTable.UniqueValue = 'ShouldBeUnique'
AND myTable.Id <> 5
在此示例中,您使用要更新的记录的ID以避免检查它,这意味着您只需检查其他记录以查看它们是否包含唯一值。