唯一值验证:更新到持久层之前或之后?

时间:2011-05-04 11:03:50

标签: asp.net-mvc-2 validates-uniqueness-of

我想知道在实体集中验证视图字段值是唯一的最佳方法是什么:在更新持久层之前或之后? 涉及的db字段具有唯一约束,其表映射到EF模型。 我在实体集中看到了两种唯一值验证方法:

  1. 之前保存对db的更改(在模型更新期间或通过使用自定义DataAnnotations装饰模型)
  2. 保存对db的更改后(通过在存储库或控制器中处理持久层生成的UpdateException)
  3. 使用第一种方法,我需要查询数据库以检查唯一性,因此任何视图更新都需要数据库选择和数据库更新。

    使用第二种方法,不需要额外选择,但很难识别错误类型和违规字段。

    我更喜欢方法2,但确定插入/更新是否因唯一约束而失败的问题迫使我选择方法1.

    还是有另一种方式吗?

1 个答案:

答案 0 :(得分:0)

检查唯一约束的首选和推荐方法是通过自定义DataAnnotation属性从UI。使用这种方法你必须编写一些代码,但这就是所有网站为检查唯一性约束所做的工作。然而,asp.net mvc 3提供开箱即用的RemoteAttribute来检查唯一性约束。我建议使用第一种方法,因为一些微小的ajax调用不会对性能产生显着影响,只要你以良好的方式组织它。