Я реализую собственный EventListener для сохранения информации аудита в NHibernate.
В настоящее время я расширяю DefaultSaveOrUpdateEventListener, переопределяя PerformSaveOrUpdate, просматривая свойства каждого объекта и сохраняя их в другом месте.
Это работает с простыми свойствами, но не работает при каскадном сохранении отношения один-ко-многим.
Если я возьму следующие лица:
[ActiveRecord]
public class Child
{
[PrimaryKey(PrimaryKeyType.GuidComb)]
public Guid Id { get; set; }
[BelongsTo]
public Parent Parent { get; set; }
}
[ActiveRecord]
public class Parent
{
[PrimaryKey(PrimaryKeyType.GuidComb)]
public Guid Id { get; set; }
[HasMany(Cascade = ManyRelationCascadeEnum.SaveUpdate)]
public IList<Child> Children { get; set; }
}
А потом сохранить родителя с ребенком:
ActiveRecordMediator<Parent>.Save(new Parent
{
Children = new List<Child>
{
new Child()
}
});
Ребенок получит правильный родительский объект, назначенный ему, когда он сохранен в базе данных, но свойство 'Parent' дочернего элемента равно нулю, когда вызывается мой EventListener.
Как я могу получить значение, которое в действительности будет сохранено в базе данных в этом случае?
[РЕДАКТИРОВАТЬ] Недавно я пытался заставить это работать, подключив каскад и увидев, что еще было сохранено в то время, но это кажется ужасно ненадежным, и я бы предпочел получить данные из NHibernate. так что я знаю, что это согласуется с базой данных.