Nhibernate 更新子项时版本不会增加

Nhibernate 更新子项时版本不会增加,nhibernate,Nhibernate,如果我正确阅读了文档,如果我有一个用版本列(由nhibernate递增)映射的订单实体,那么对订单行的更改应该更新聚合根(订单)的版本号。当我添加/删除订单行时,它确实会这样做,但如果我只更改订单行上的数量,例如,订单的版本不会更新。这是预期的行为吗 我检查了NH源代码,当试图确定是否需要版本增量时,它似乎只检查脏集合,并且只有在添加/删除项时集合才会脏,而不是集合中的任何项是否脏 我有以下映射: public class OrderMap : ClassMap<Order> {

如果我正确阅读了文档,如果我有一个用版本列(由nhibernate递增)映射的订单实体,那么对订单行的更改应该更新聚合根(订单)的版本号。当我添加/删除订单行时,它确实会这样做,但如果我只更改订单行上的数量,例如,订单的版本不会更新。这是预期的行为吗

我检查了NH源代码,当试图确定是否需要版本增量时,它似乎只检查脏集合,并且只有在添加/删除项时集合才会脏,而不是集合中的任何项是否脏

我有以下映射:

public class OrderMap : ClassMap<Order>
{
    public OrderMap()
    {
        Id(c => c.Id).GeneratedBy.GuidComb();
        Version(c => c.Version);
        OptimisticLock.Version();
        HasMany(x => x.OrderLines)
            .Inverse()
            .Cascade.AllDeleteOrphan();
    }
}

public class OrderLineMap : ClassMap<OrderLine>
{
    public OrderLineMap()
    {
        Id(x => x.Id).GeneratedBy.GuidComb();
        Map(x => x.Quantity);
        References(x => x.Order);
    }
}
public类OrderMap:ClassMap
{
公共秩序地图()
{
Id(c=>c.Id).GeneratedBy.GuidComb();
版本(c=>c.Version);
OptimisticLock.Version();
HasMany(x=>x.OrderLines)
.Inverse()
.Cascade.AllDeleteOrphan();
}
}
公共类OrderLineMap:ClassMap
{
公共OrderLineMap()
{
Id(x=>x.Id).GeneratedBy.GuidComb();
地图(x=>x.Quantity);
参考文献(x=>x.Order);
}
}

所以我的问题是,这是否是预期的行为?也就是说,只有在使用“删除/添加”修改子集合时,修改子实体时版本才会更新。它在某种程度上打破了聚合根并发模型

这确实是预期的行为。有一种方法可以使用事件侦听器来解决此问题,该事件侦听器可以检测子事件中的更改,并遍历到聚合根并乐观地锁定(触发版本更改)

更多信息由Ayende提供: