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修复为未来用户检查正确的。:)