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