栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在ICollection的属性上拦截NHibernate持久性操作(许多关联)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在ICollection的属性上拦截NHibernate持久性操作(许多关联)

好吧,我采用了实现NHibernate侦听器的解决方案,所以我有一个像这样的侦听器:

public class CustomSaveUpdateEventListener : IPostInsertEventListener, IPostUpdateEventListener {    private void ScheduleToCommit(AbstractPostDatabaseOperationEvent @event) {        // Some filter        if (@event.Entity.GetType().FullName.Equals(MY_ENTITY_TO_INTERCEPTS) { object o = @event.Entity; // Some logic... // ... // ... IQuery namedQuery = @event.Session.GetNamedSQLQuery(MY_NAMED_QUERY); //namedQuery.SetParameter(...); // <== You can set parameters //namedQuery.ExecuteUpdate(); // <== DO NOT EXCEUTE HERE, this launches more events recursively and can generate stackoverflow @event.Session.ActionQueue.RegisterProcess(new MyActionBeforeCommit(@event, namedQuery).SavevaluesOperation); }        }    }    public void onPostInsert(PostInsertEvent @event) {        ScheduleToCommit(@event);    }    public void onPostUpdate(PostUpdateEvent @event) {        ScheduleToCommit(@event);    }}

而且我的对象

MyActionBeforeCommit()
被安排为仅在提交事务后才运行。因此,在我的“未来行动”中,我有:

public class MyActionBeforeCommit {    private AbstractPostDatabaseOperationEvent e;    private IQuery query;    public MyActionBeforeCommit(AbstractPostDatabaseOperationEvent e, IQuery query) {        this.e = e;        this.query = query;    }    public void SavevaluesOperation() {        // Here your query will be executed only when a transation is commited, if         // it's rolledback this won't be executed        query.ExecuteUpdate();     }}

最后,我们需要在NHibernate配置上注册新的侦听器,如下所示:

Configuration.SetListener(ListenerType.PostInsert, new    CustomSaveUpdateEventListener());Configuration.SetListener(ListenerType.PostUpdate, new CustomSaveUpdateEventListener());

而且效果很好。这是一个非常好的NHibernate功能,非常强大。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号