我正在使用NHibernate并且需要更新/添加一个实体类(a),它可以引用需要具有唯一“名称”字段的另一个实体类(b)。
那么最好是:
答案 0 :(得分:1)
我实际上一直在思考这个场景并尝试了一些事情。
首先,我不太喜欢存储过程,为什么要使用NHibernate,如果你要将自己绑定到我说的特定数据库引擎上。对于这种情况,存储过程(选项2)的行为与选项1和3非常相似,具体取决于您对proc的实现(即先查询然后保存,还是使用回滚执行更复杂的事务)。因此,除非您有其他想法,否则我不会对此进行进一步评论。
您可以使用选项1,但这需要您作为程序员的更多工作。它可能适用于1-2个实体,但是您是否可以对所有实体进行概括是未知的,因为我不知道您的项目的详细信息。此外,为什么要查询NHibernate是否能为你做到这一点?
所以我建议选项3,我更喜欢它,它对我来说效果很好。 当符合约束时,我回滚整个事务。我还确保获得有问题的元素,因此我可以向用户说“聪明”,例如“用户x无法保存,因为电子邮件是重复的”,而不是“用户x无法保存:重复输入”。