【问题标题】:Check for data integrity issue, or let database handle检查数据完整性问题,或让数据库处理
【发布时间】:2014-07-03 01:36:21
【问题描述】:

我在表中有一个列,例如商店的名称,它应该保持唯一。我已将唯一约束添加到表中。

我正要在我的保存方法中添加一些代码,在尝试相同之前检查重复项,但是......有什么理由不做同样的事情,让唯一约束捕捉问题,然后以某种方式(使用实体框架)检查错误,并以适当的回复进行回复?

这将节省一个“SELECT”...但是从代码中删除“业务逻辑”并允许数据库报告这样的漏洞是一种好习惯吗?

我可以从发送到实体框架的 SaveChanges() 命令中找出错误是什么吗?

【问题讨论】:

    标签: sql-server entity-framework


    【解决方案1】:

    不幸的是,Entity Framework 没有很好的唯一验证解决方案,正如我不久前询问的那样:

    Options for Unique field in Entity Framework - navigation property to dbSet?

    在 SaveChanges() 之前显式检查唯一性允许您优雅地向用户显示友好且有意义的错误消息。

    捕获数据库错误需要解析错误代码/文本,以确定它是否违反了唯一性或发生了其他一些数据库错误。

    因此,假设您重视用户体验,额外的数据库调用 + 次要模式破坏是 IMO 可接受的成本。可以以某种方式在您的域/业务层中推广唯一的检查代码,以使其保持在正确的位置。

    【讨论】:

    • 谢谢。我是这么怀疑的。这有点短视EF。错误处理。好的。会自己做检查。谢谢。
    • 在您尝试自己实现它之前,EF 似乎是短视的。前段时间我尝试了一下,因为实体框架扩展并将其概括为域级验证非常困难!
    • 不同意没有好的解决方案。看到这个答案stackoverflow.com/questions/18714550/… 和这个stackoverflow.com/questions/9603131/…
    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多