Создание объекта NHibernate и инициализация набора

StackOverflow https://stackoverflow.com/questions/258231

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть таблица с именем Product , и у меня есть таблица StorageHistory .

Теперь Product содержит ссылку на StorageHistory в своих сопоставлениях

<set name="StorageHistories" lazy="false">
  <key column="ProductId" />
  <one-to-many class="StorageHistory" />
</set>

И это работает, когда я получаю объект из ORM, я получаю пустой ISet.

Что вызывает у меня головную боль, так это то, как построить объект в первую очередь. Когда я делаю следующее:

var product = new Product();
session.Save(product);

Свойство product.StorageHistories имеет значение NULL, и я получаю исключение NullReferenceException. Итак, как мне добавить элементы в эту коллекцию, или я должен пойти путем добавления самих элементов StorageHistory в БД?

Это было полезно?

Решение

Я всегда делаю следующее в ctor родительского объекта:

историй = новый HashedSet ();

Это относится к случаю использования Save (). Как вы указали, сценарий использования Load () / Get () и т. Д. Распространяется на NHibernate.

Другие советы

Почему бы и нет?

private ISet _StorageHistories;
public virtual ISet StorageHistories {
     protected set { _StorageHistories = value;}
     get { if (_StorageHistories == null) _StorageHistories = new HashSet();
           return _StorageHistories;
     }
}

Конечно, если у вас все равно есть проблемы с личным доступом, вы можете поместить его в конструктор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top