【问题标题】:How to properly configure NHibernate event listeners如何正确配置 NHibernate 事件监听器
【发布时间】:2010-12-11 17:13:18
【问题描述】:

我第一次尝试使用事件监听器。我见过的所有示例都显示了它是多么容易配置,但由于某种原因我遇到了麻烦——它似乎没有被调用。我怀疑我遗漏了一些明显的东西。

我试过了:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory name="TerraCognita.LoanExpress">
        <!-- other stuff... -->
        <listener type="delete" class="Test.TestDeleteListener, MyDllName" />
    </session-factory>
</hibernate-configuration>

还有:

<hibernate-configuration   xmlns="urn:nhibernate-configuration-2.2">
    <session-factory name="TerraCognita.LoanExpress">
        <!-- other stuff... -->
        <event type="delete">
            <listener class="Test.TestDeleteListener, MyDllName" />
        </event>
    </session-factory>
</hibernate-configuration>

加载配置并构建会话工厂时:

var cfg = new NHibernate.Cfg.Configuration();
cfg.AddAssembly("MyDllName");
sessionFactory = cfg.BuildSessionFactory();

实例化后,cfg.EventListeners.DeleteEventListeners 有一个 DefaultDeleteEventListener 类型的条目(如我所料)。但是,在调用 cfg.AddAssembly 之后,仍然是这种情况 - 但考虑到配置,我希望 DeleteEventListener 实际上应该是 TestDeleteListener 类型。

在我的单元测试中,让事件监听器正常工作的唯一方法是手动将其添加到会话信息中:

var sess = GetSession();
sess.GetSessionImplementation().Listeners.DeleteEventListeners = 
    new NHibernate.Event.IDeleteEventListener[] { new TestDeleteListener() };

我知道这不是必需的,我应该能够正确配置它。谁能指出我在这里做错了什么?

【问题讨论】:

    标签: nhibernate event-listener


    【解决方案1】:

    你的配置没问题,只是你忽略了调用cfg.Configure()。把你的初始化代码改成这个就好了:

    var cfg = new NHibernate.Cfg.Configuration();
    cfg.Configure();
    cfg.AddAssembly("MyDllName");
    sessionFactory = cfg.BuildSessionFactory();
    

    【讨论】:

    • ...但这不是我所看到的。我替换默认事件侦听器。如上所述,我在跟踪时看到的是事件侦听器始终是 DefaultDeleteEventListener 类型,而不是我的。
    • 嗯,不过配置没有问题!你在哪里寻找听众,在会话工厂或会话上?它应该在工厂里......你真的尝试过上面的代码(通过复制/粘贴)吗?
    • 这就是问题所在 - 缺少对 cfg.Configure() 的调用。如果你想编辑你的答案,我会选择它为正确的。
    • 嗯,问题“你忘记调用 cfg.Configure() 了吗?”从一开始就在那里......看看“P.S.”在我的答案的底部(我没有编辑它)。
    • 我明白了,但是您上面的其余答案与我的问题无关。我希望您清理它并保留相关位以供后代使用,例如“配置很好,您缺少对...的调用...(我自己编辑它,但我没有业力.) 如果您不想这样做,我可以自己添加一个只有那个答案的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 2011-07-05
    • 2011-10-10
    • 2015-02-27
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多