Я реализую пользовательский EventListener для сохранения информации аудита в NHibernate.NHibernate EventListeners - получение значения свойства сохраняемого объекта
В настоящее время я расширяю 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()
}
});
Ребенок получит правильный родитель, возложенный на него, когда его сохраняется в базу данных но свойство «Родительское» для ребенка равно null, когда вызывается мой EventListener.
Как я могу получить значение, которое на самом деле будет сохраняться в базе данных в этом случае?
[EDIT] Недавно я смотрел, как это работает, подключив каскад и увидев, что еще было спасено в то время, но это кажется ужасно ненадежным, и я бы предпочел получить данные из NHibernate, поэтому я знаю, что это соответствует базе данных.
Спасибо - я не уверен, что решает мою актуальную проблему (Child.Parent по-прежнему равен нулю в момент, когда мой слушатель выполняется), но по крайней мере я понимаю случай, когда мой код делает неприятные взломы для сохранения каскада, и я исправил ошибку , –