NHibernate和缺少的构造函数代码

时间:2012-01-18 12:06:51

标签: nhibernate constructor

通过NH加载时,使用默认构造函数,然后设置地图中的每个属性。我很好。

但是如果我在构造函数中有一些逻辑怎么办?我可以在NH建设后注册要调用的方法吗?

e.g。 (它可能更复杂,涉及几个属性)

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 个答案:

答案 0 :(得分:1)

您可以创建私有默认构造函数。

NHibernate需要一个默认构造函数,以便能够在从数据库加载实体时构造对象。 构建完成后,NHibernate将使用DB中存在的数据设置所有属性或成员。

我的观点是,NHibernate应该只使用来自数据库的数据来恢复实体,并且它不应该执行任何可能影响对象状态的其他逻辑。

答案 1 :(得分:1)

您可以编写拦截器并覆盖Instantiate()。

e.g:

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;
    }
}