gpt4 book ai didi

nhibernate - 更新子项时版本不增加

转载 作者:行者123 更新时间:2023-12-03 11:48:45 24 4
gpt4 key购买 nike

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

我检查了 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);
}
}

所以我的问题是这是否是预期的行为?也就是说,只有在使用 remove/add 修改子集合时,修改子实体时才会更新版本。它打破了聚合根并发模型。

最佳答案

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

Ayende 在这篇文章中的更多信息:
http://ayende.com/blog/4055/nhibernate-automatic-change-tracking-for-aggregate-roots-in-ddd-scenarios

关于nhibernate - 更新子项时版本不增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8308586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com