nhibernate是否真的需要默认构造函数来持久化对象?

时间:2011-05-31 10:12:00

标签: nhibernate

由于某种原因,我不想让用户创建对象的实例,而不是向构造函数发送属性 但据我所知,该对象应具有默认构造函数,因此可以创建一个不发送requierd属性的实例。 有什么方法可以防止这个问题吗?若是,是否有任何副作用?

2 个答案:

答案 0 :(得分:6)

只需使用受保护的默认构造函数:

public class Product
{
    protected Product() { }

    public Product(Category category)
    {
        this.Category = category;
    }
}

答案 1 :(得分:5)

“NHibernate允许使用Value Objects的私有默认构造函数,但对于Entities,您需要一个默认的public或protected构造函数,因为private是不够的。”

在这里你可以找到一些东西:

https://github.com/davybrion/companysite-dotnet/blob/master/content/blog/2009-10-why-nhibernate-entities-need-a-public-or-protected-parameterless-constructor.md

这里有一个没有构造函数的实验:

http://kozmic.net/2011/03/20/working-with-nhibernate-without-default-constructors/

这是一个使用依赖注入的示例:

http://nhibernate.info/blog/2008/12/12/entities-behavior-injection.html