NHibernate:拦截器的意义返回值

时间:2009-05-12 20:30:20

标签: nhibernate interceptor

我认为这是一个简单的问题,但我的Google搜索功能很薄弱。

我遇到了以下链接中描述的问题:生成的ID和级联:

https://www.hibernate.org/hib_docs/nhibernate/html/example-parentchild.html(在底部)

我使用他们建议的Interceptor方法修复它。一切似乎都有效,所以我很高兴。

那就是说,我不知道返回值的重要性来自以下方法:

    public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        if (entity is Persistent) ((Persistent)entity).OnLoad();
        return false;
    }

    public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        if (entity is Persistent) ((Persistent)entity).OnSave();
        return false;
    }

在这两种情况下都会返回false。

当我谷歌关于NHibernate Interceptor时,我看到了很多关于如何编写一个的例子。有些人返回true(http://www.lostechies.com/blogs/rhouston/archive/2008/03/27/creating-a-timestamp-interceptor-in-nhibernate.aspx)。我不知道这里的区别是什么。我的代码正在运行,但拦截器对我来说似乎很有用,所以我希望能有更好的理解。

2 个答案:

答案 0 :(得分:5)

我相信返回值应指示拦截器方法中是否已更改state参数。你是对的 - 目前这是一个艰难的谷歌 - 最近NHibernate网站移动了,谷歌似乎找不到像以前那么多有用的信息。

答案 1 :(得分:0)

休伊,

阅读这篇文章,我不是.net程序员,但这篇文章非常有用:

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#

  

第11章拦截器和事件它   通常对应用程序有用   对发生的某些事件做出反应   在NHibernate里面。这允许   某些种类的实施   通用功能和扩展   NHibernate功能。

     

11.1。拦截器IInterceptor接口提供来自的拦截器   允许的应用程序会话   申请检查和/或   操纵持久性的属性   对象在保存,更新之前,   删除或加载。一种可能的用途   这是为了跟踪审计   信息。例如,   自动跟随IInterceptor   在设置时设置createTimestamp   创建IAuditable并更新   lastUpdateTimestamp属性时   IAuditable已更新。

希望能再多一点。