我使用NHibernate作为我的ORM。我有一种情况,我在ITransaction中包装了一些东西。我正在监听NHibernate中的SaveUpdate事件,然后在SaveUpdate处理程序中进行实体验证。NHibernate - 验证和交易的问题
对于我的一个实体,我想验证某个属性的值没有改变。所以我想,我会加载数据库中现有对象的值,并将其与新值进行比较。问题是我调用了ITransaction.Commit()来保存我的实体对象,并且事务在验证发生时并未实际提交,所以我无法从数据库加载现有对象,因为事务已将其锁定。
所以我想我在这里有几个不同的问题: - SaveUpdate事件是否是验证的正确位置? - 有没有另外一种方法可以做到这一点,以便我可以做我需要做的验证(从数据库中获取现有值并进行比较)?
我确定有人在那里遇到类似的情况......希望!
我不同意。我最终希望在保存之前验证我的实体,所以我认为它确实与持久性有关。对属性进行验证适用于简单情况,但有时验证规则不仅仅涉及单个实体(例如,银行帐户只能拥有一个主要帐户持有者)。 – 2009-08-18 13:02:07
这不是不使用方法来更改实体中的事物的原因。聚合根应该负责验证它的子实体。 – Paco 2009-08-18 13:55:27
但是当我保存一个聚合根的子实体时呢? – 2009-08-18 14:08:22