在Nhibernate中使用IList,不会被初始化

时间:2010-11-27 14:45:20

标签: nhibernate fluent-nhibernate

我基本上有:

Public Class Job: MyBaseClass
{
    public virtual string JobInformation {get;set;}
    ...
    public virtual List<Item> JobItems {get;set;}
}

我在构造函数中使用List并初始化它(JobItems = new List();)。但是,我得到了一个例外(Nhibernate.Collection.Generic.PersistentGenericBag)

我读了this question,它说我应该使用IList。

所以现在我有了

public class Job: MyBaseClass
{
    public virtual string JobInformation {get;set;}
    ...
    public virtual IList<Item> JobItems {get;set;}
}

public virtual void AddItem(Item item)
{
     //snip validation
     this.JobItems.Add(item);
}

但是,它会抛出NullReferenceException,因为尚未初始化JobItems。 NHibernate什么时候初始化这个集合?或者我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

使用支持字段并在返回时确保它不为空

public IList<Item> JobItems
{
    get { return _jobItems ?? (_jobItems = new List<Item>()); }
    set { _jobItems = value; }
}

答案 1 :(得分:1)

如果先前尚未初始化集合,则应初始化集合。

private IList<Item> _jobItems;
public IList<Item> JobItems
{
    get
    {
        return _jobItems ?? (_jobItems = new List<Item>());
    }
    private set
    {
        _jobItems = value;
    }
}