我有一个我认为是 NHibernate 相当常见的用例。我创建了一个实体并尝试使用 ISession.Save() 和 Transaction.Commit() 来保存它。在这一点上,我希望违反唯一/主键约束之类的事情会作为例外出现在我面前。然而,我看到的只是一个 GenericADOException。这并不能帮助我区分真正的数据库故障与要求用户为实体选择另一个名称以保持唯一性之类的事情。
目前,我已经实现了首先查询的丑陋解决方法,以确保不会违反约束。这只是一个等待发生的竞争条件,我真的不希望用户看到“糟糕,数据库做了一些有趣的事情!也许你应该再试一次。” 种消息。
有没有一种优雅的方法来解决这个问题?