NHibernate - 验证和事务的问题

时间:2009-08-17 19:19:55

标签: nhibernate validation transactions

我正在使用NHibernate作为我的ORM。我有一种情况,我在ITransaction中包含了一些东西。我正在NHibernate中收听SaveUpdate事件,然后在SaveUpdate处理程序中进行实体验证。

对于我的一个实体,我想验证某个属性的值没有改变。所以我想我会从数据库中加载现有对象的值并将其与新值进行比较。问题是我调用了ITransaction.Commit()来保存我的实体对象,并且在验证发生时事实上还没有提交事务,因此我无法从数据库加载现有对象,因为事务已将其锁定

所以我想我在这里有几个不同的问题: - SaveUpdate事件是否是正确的验证位置? - 有没有其他方法可以做到这一点,以便我可以进行我需要做的验证(从数据库中获取现有值并进行比较)?

我确信那里的其他人遇到了类似的情况......希望如此!

2 个答案:

答案 0 :(得分:0)

验证与持久性无关,因此saveupdate不是正确的地方。验证的正确位置取决于:您要验证的内容,您的编程风格,用于显示验证消息的UI框架等。就个人而言,我更愿意将验证放在事物发生变化的地方,所以我会把它放在设置属性的change方法中。我不明白你为什么要加载以前状态的实体,因为当你第一次加载它时,这个状态已经加载了。

答案 1 :(得分:0)

如果您想查看如何进行验证的示例,我建议您查看ScottGu的NerdDinner。虽然他使用Linq to SQL作为他的ORM,但很容易让它适应NHibernate。

我最近在ASP.NET MVC + NHibernate项目中使用了类似于NerdDinner的验证系统,取得了很大的成功。