C# NHibernate EventListener将属性设置为null

C# NHibernate EventListener将属性设置为null,c#,nhibernate,C#,Nhibernate,我有一个与此类似的模型: public class Employee { public virtual string Name { get; set; } public virtual string Name { get; set; } public virtual Gender Gender { get; set; } } 我有这样一个问题: var myEmployees = session.Query<Employee>()

我有一个与此类似的模型:

public class Employee {
    public virtual string Name { get; set; }
    public virtual string Name { get; set; }
    public virtual Gender Gender { get; set; }
}
我有这样一个问题:

var myEmployees = session.Query<Employee>()
                         .Where(a => a.Name.Equals(name)); // name is given as parameter
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.EventListeners.PostLoadEventListeners = new IPostLoadEventListener[] {new EmployeePostLoadListener()};
var myEmployees=session.Query()
.其中(a=>a.Name.Equals(Name));//名称作为参数提供
现在我需要使用NHibernate EventListener将
性别设置为null。我想我必须使用IPreLoad或IPostLoad EventListener。但我不知道如何访问实体


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

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

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的配置中,您可以添加以下侦听器:

var myEmployees = session.Query<Employee>()
                         .Where(a => a.Name.Equals(name)); // name is given as parameter
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.EventListeners.PostLoadEventListeners = new IPostLoadEventListener[] {new EmployeePostLoadListener()};

有关EventListeners和Interceptor的详细信息,请参见。

您可以使用
IPostLoad
事件并检查正在加载的实体的类型。但让我问一下,为什么要在eventListener上这样做?@FelipeOriani这是因为我们有一个外部工具,如果用户未经授权,它必须将一些属性值设置为null。你能给我举一个eventlistener的例子,也许你会怎么做?最后一个问题,它不是一个
PostLoad
而不是一个
PreLoad
eventlistener吗?是的,它可能是PostLoad,因为实体已经加载了。我将我的awnser修复为未来用户检查正确的。:)