首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >要设置属性null的NHibernate EventListener

要设置属性null的NHibernate EventListener
EN

Stack Overflow用户
提问于 2019-06-05 20:50:38
回答 1查看 106关注 0票数 1

我有一个类似于下面的模型:

代码语言:javascript
运行
复制
public class Employee {
    public virtual string Name { get; set; }
    public virtual string Name { get; set; }
    public virtual Gender Gender { get; set; }
}

我有一个类似这样的查询:

代码语言:javascript
运行
复制
var myEmployees = session.Query<Employee>()
                         .Where(a => a.Name.Equals(name)); // name is given as parameter

现在,我需要使用NHibernate EventListener将Gender设置为null。我想我必须使用IPreLoad或IPostLoad EventListener。但我不知道用热度来访问实体。

有什么想法吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-07 21:24:51

在NHibernate上使用侦听器之前,您必须了解一些重要的事情。它将在从NHibernate角度映射的所有实体上运行。如果你在上面写了一个糟糕的代码,它可能会降低你的应用程序的性能。鉴于此,您可以在NHibernate Configuration对象上定义一个侦听器。您可以定义一个类来实现所需NHibernate侦听器的接口,并实现该方法。将此类的实例添加到NHibernate配置中。(我没有测试下面的代码,它只是一个草稿)示例:

代码语言:javascript
运行
复制
using NHibernate;
using NHibernate.Event;
using NHibernate.Persister.Entity;

public class EmployeePostLoadListener : IPostLoadEventListener
{
    public virtual void OnPostLoad(PostLoadEvent postloadEvent)
    {
        if (postloadEvent.Entity is Employee)
        {
            var employee = (Employee)postloadEvent.Entity;

            // do what you want with the object
            employee.Gender = null;
        }
    }
}

在NHibernate的配置中,您可以添加此监听程序,如下所示:

代码语言:javascript
运行
复制
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.EventListeners.PostLoadEventListeners = new IPostLoadEventListener[] {new EmployeePostLoadListener()};

documentation上查看有关EventListeners和拦截器的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56460841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档