NHibernate EventListener для установки свойства null - PullRequest
1 голос
/ 05 июня 2019

У меня есть модель, которая выглядит примерно так:

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

Теперь мне нужно установить Gender вnull с NHibernate EventListener.Я предполагаю, что я должен использовать IPreLoad или IPostLoad EventListener.Но я не знаю, как получить доступ к сущности.

Есть идеи?Заранее спасибо.

1 Ответ

2 голосов
/ 07 июня 2019

Вы должны понять что-то важное, прежде чем использовать Слушатели в 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()};

Подробнее о EventListener и Interceptors см. В документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...