通过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;
}
}
}
答案 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;
}
}