0
我重寫了NHibernate的PreInsertEventListener,以便將實體的DateCreated屬性設置爲DateTime.Now。無法在NHibernate事件偵聽器中設置實體屬性
這裏是我的代碼:
public bool OnPreInsert(PreInsertEvent e)
{
DomainObject domainObject = (DomainObject) e.Entity;
if (domainObject.CreatedById == 0) throw new Exception("The " + domainObject.GetType().Name + " cannot be created if its CreatedById property has not been set.");
domainObject.DateCreated = DateTime.Now;
return false;
}
我發現,這裏設置的任何實體屬性(例如,呼叫上面dateCreated會)沒有找到自己的方式進入由NHibernate的創建的SQL更新。有誰知道什麼給了?
是的,我確信我的事件監聽器正在被調用!
感謝
大衛
正確的,一些額外的增強我可以建議在這裏: 1)使用從實體(例如dateCreated會和DateCreatedPropertyName) 公開屬性和屬性名的接口。 2)爲包含SetProperty邏輯的攔截器使用基類(或使用助手類保持此用法一致) – DanP 2010-07-12 13:52:22
感謝您的建議。我可以只問第一個理由嗎? – David 2010-07-12 14:05:19
@David:這允許你爲可能需要它的多個實體使用攔截器,除非你確定所有的實體將使用與接口公開的完全相同的屬性名稱,否則屬性名通常是一個好主意(因爲你需要它是'set'調用的字符串版本) - 有意義嗎? – DanP 2010-07-12 14:08:06