NHibernate EventListener 设置 属性 null
NHibernate EventListener to set property null
我有一个看起来与此类似的模型:
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。但我不知道访问实体的热点。
有什么想法吗?提前致谢。
在使用 NHibernate 上的监听器之前,您必须了解一些重要的事情。它将 运行 覆盖从 NHibernate
视角映射的所有实体。如果您在上面编写了错误的代码,它会降低应用程序的性能。鉴于此,您可以在 NHibernate
Configuration
对象上定义一个侦听器。您定义一个 class 来实现您想要的 NHibernate 侦听器的接口并实现该方法。将此 class 的一个实例添加到 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 和 Interceptors 的更多信息。
我有一个看起来与此类似的模型:
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。但我不知道访问实体的热点。
有什么想法吗?提前致谢。
在使用 NHibernate 上的监听器之前,您必须了解一些重要的事情。它将 运行 覆盖从 NHibernate
视角映射的所有实体。如果您在上面编写了错误的代码,它会降低应用程序的性能。鉴于此,您可以在 NHibernate
Configuration
对象上定义一个侦听器。您定义一个 class 来实现您想要的 NHibernate 侦听器的接口并实现该方法。将此 class 的一个实例添加到 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 和 Interceptors 的更多信息。