7

我认为这是一个简单的问题,但我的谷歌搜索对此很薄弱。

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

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

我使用他们建议的拦截器方法修复了它。一切似乎都在工作,所以我很高兴。

也就是说,我不知道返回值的意义是什么,例如:

    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 拦截器时,我看到了很多关于如何编写拦截器的示例。有些反而返回 true ( http://www.lostechies.com/blogs/rhouston/archive/2008/03/27/creating-a-timestamp-interceptor-in-nhibernate.aspx )。我不知道这里有什么区别。我的代码正在运行,但拦截器对我来说似乎很有用,所以我想更好地理解。

4

2 回答 2

5

我相信返回值应该指示拦截器方法中的状态参数是否已更改。你是对的——目前对谷歌来说这是一个艰难的选择——NHibernate 网站最近移动了,谷歌似乎没有像以前那样找到更多有用的信息。

于 2009-05-12T21:02:23.043 回答
0

休伊,

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

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

第 11 章拦截器和事件 应用程序对 NHibernate 内部发生的某些事件做出反应通常很有用。这允许实现某些类型的通用功能,以及 NHibernate 功能的扩展。

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

希望它能多一点启发你。

于 2009-05-12T20:45:45.533 回答