我有一个类似于下面的模型:
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 EventListener将Gender设置为null。我想我必须使用IPreLoad或IPostLoad EventListener。但我不知道用热度来访问实体。
有什么想法吗?提前谢谢。
发布于 2019-06-07 21:24:51
在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的配置中,您可以添加此监听程序,如下所示:
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.EventListeners.PostLoadEventListeners = new IPostLoadEventListener[] {new EmployeePostLoadListener()};在documentation上查看有关EventListeners和拦截器的更多信息。
https://stackoverflow.com/questions/56460841
复制相似问题