Использование IList в Nhibernate, не инициализируется - PullRequest
1 голос
/ 27 ноября 2010

У меня в основном есть:

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)

Я прочитал этот вопрос и он сказал, что вместо этого я должен использовать 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 ]

3 голосов
/ 27 ноября 2010

используйте поле поддержки и при возврате убедитесь, что оно не равно нулю

public IList<Item> JobItems
{
    get { return _jobItems ?? (_jobItems = new List<Item>()); }
    set { _jobItems = value; }
}
1 голос
/ 27 ноября 2010

Вы должны инициализировать коллекцию, если она не была инициализирована ранее.

private IList<Item> _jobItems;
public IList<Item> JobItems
{
    get
    {
        return _jobItems ?? (_jobItems = new List<Item>());
    }
    private set
    {
        _jobItems = value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...