我正在實現一個自定義的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()
}
});
的孩子將得到正確的父分配給它的時候保存到數據庫但是當我的EventListener被調用時,孩子的'Parent'屬性爲null。
在這種情況下,我怎樣才能獲得實際上將持久化到數據庫的值?
[編輯]我最近一直在尋找通過鉤住級聯,看看當時還保存着什麼,但這似乎非常不可靠,我更願意從中獲取數據NHibernate所以我知道它與數據庫一致。
謝謝 - 我不確定這是否解決了我的實際問題(Child.Parent在我的偵聽器執行時仍然爲空),但至少我理解我的代碼在惡作劇級聯保存的情況下進行修復,並修復了一個bug 。 – 2009-11-27 10:22:32