NHibernate сохраняют / слушатели события обновления: прислушивание к дочернему объекту сохраняет

У меня есть объект области, который имеет многих детей SubArea:

public class Area
{
    ...
    public virtual IList<SubArea> SubAreas { get; set; } 
}

он дети отображается как однонаправленная необратная связь:

public class AreaMapping : ClassMap<Area>
{
    public AreaMapping()
    {
        HasMany(x => x. SubAreas).Not.Inverse().Cascade.AllDeleteOrphan();
    }
}

Областью является мой совокупный корень. Когда я сохраняю область (например, Сессия. Сохраните (область)), область сохраняется и дочерний SubAreas, автоматически расположенный каскадом.

Я хочу добавить сохранение или слушателя события обновления выгоды каждый раз, когда мои области и/или подобласти сохраняются. Скажите, например, что у меня есть область, которая имеет 5 SubAreas. Если я сцепляюсь в SaveEventListeners:

Configuration.EventListeners.SaveEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener };

Когда я сохраняю область, Mylistener только уволен однажды только за область (SubAreas проигнорированы). Я хочу, чтобы 5 SubAreas были пойманы также в конечном счете слушатель. Если я сцепляюсь в SaveOrUpdateEventListeners вместо этого:

Configuration.EventListeners.SaveOrUpdateEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener };

Когда я сохраняю область, Mylistener не запущен вообще. Странно, если я сцепляюсь в SaveEventListeners и SaveOrUpdateEventListeners:

Configuration.EventListeners.SaveEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener };
Configuration.EventListeners.SaveOrUpdateEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener };

Когда я сохраняю область, Mylistener запущен 11 раз: однажды для области, и дважды для каждого SubArea! (Я думаю, потому что NHIbernate ВВОДИТ SubArea и затем ОБНОВЛЯЕТ с внешним ключом области).

Кто-либо знает то, что я делаю неправильно здесь, и как я могу заставить слушателя стрелять однажды для каждой области и подобласти?

7
задан James Allen 29 December 2009 в 10:37
поделиться

2 ответа

Не имеет 100% отношения к вашему вопросу, но если вы нанесете карту с инверсным="true" на вашу коллекцию, вы не получите вставки и инструкций по обновлению.

0
ответ дан 8 December 2019 в 01:44
поделиться

NH выдает инструкцию INSERT, чтобы узнать идентификатор объекта, если он не может знать (например, IDENTITY или SEQUENCE).

Поэтому, если вы хотите аннулировать это, вам нужно использовать генератор идентификаторов, который не требует кругового пользования БД (например, guid или guid.combo).

0
ответ дан 8 December 2019 в 01:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: