Версия не увеличивается при обновлении дочернего элемента - PullRequest
4 голосов
/ 29 ноября 2011

Если я правильно прочитал документацию, если у меня есть сущность Order, сопоставленная со столбцом версии (увеличенным на nhibernate), то изменения в строках заказа должны обновить номер версии для совокупного корня (Order).Это действительно происходит, когда я добавляю / удаляю строки заказа, но если я только изменяю, например, количество в строке заказа, то версия заказа не обновляется.Это ожидаемое поведение?

Я проверил источник 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.Это как бы нарушает модель параллельного использования совокупного корня.

1 Ответ

3 голосов
/ 29 ноября 2011

Это действительно ожидаемое поведение.Есть способ решить эту проблему с помощью прослушивателя событий, который может обнаруживать изменения в дочерних элементах и ​​переходить к совокупному корню и оптимистично блокировать (вызывая изменение версии).

Больше информации в этом посте от Ayende: http://ayende.com/blog/4055/nhibernate-automatic-change-tracking-for-aggregate-roots-in-ddd-scenarios

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...