NHibernate и отсутствующий код конструктора - PullRequest
0 голосов
/ 18 января 2012

При загрузке через NH используется конструктор по умолчанию, а затем устанавливается каждое свойство на карте. Это хорошо для меня.

Но что, если у меня есть логика в конструкторе? Могу ли я зарегистрировать метод для вызова после построения NH?

например. (это может быть более сложным и включает в себя несколько свойств)

public class Person
{
    string name;
    int? age;
    DateTime ageStamp;

    public Person(string name, int? age)
    {
        this.name = name;
        if (age!=null)
        {
            this.age = age;
            ageStamp = DateTime.Now;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 18 января 2012

Вы можете написать перехватчик и переопределить Instantiate ().

например:.

public interface IInitializable
{
    void Initialize();
}

public class InitializingInterceptor : EmptyInterceptor
{
    public override object Instantiate(string clazz, EntityMode entityMode, object id)
    {
        object result = base.Instantiate(clazz, entityMode, id);

        var initializable = result as IInitializable;
        if(initializable!=null)
            initializable.Initialize();

        return result;
    }
}
1 голос
/ 18 января 2012

Вы можете создать частный конструктор по умолчанию.

NHibernate нужен конструктор по умолчанию, чтобы иметь возможность конструировать объект при загрузке объекта из базы данных.После создания NHibernate установит все свойства или элементы с данными, которые существуют в БД.

Мое мнение, что NHibernate должен просто восстановить объект с данными, поступающими из БД, и что он не должен выполнять никакихдругая логика, которая может повлиять на состояние объекта.

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