Значения нулевого списка nHibernate на одном для многих - PullRequest
0 голосов
/ 22 апреля 2009

У меня есть отображение заказа со многими элементами заказа. Отображение правильно сохраняет и Order, и OrderItems в базу данных, когда я сохраняю только Order, но когда я перезагружаю этот заказ, список OrderItems, который содержит заказ, заполняется нулевыми значениями (для всех других элементов порядка в таблица), пока он не достигнет OrderItem, который имеет внешний ключ Заказа. Таким образом, общее количество пустых элементов заказа - это количество строк таблицы OrderItems (без фактических элементов заказа, связанных с Заказом). Вот мои сопоставления:

Заказать:

<list name="OrderItems" table="OrderItems" cascade="all" inverse="true" >
  <key column="OrderID"/>
  <index column="OrderItemID" />
  <one-to-many class="OrderItem" not-found="ignore" />
</list>

OrderItem:

<many-to-one name="Order" class="Order" column="OrderID" not-null="true" />

Вот реализация класса Order:

public class Order : {
    private IList<OrderItem> orderItems = new List<OrderItem>();

Я читал, что nHibernate не поддерживает списки, как многие части отношений, но сохранение работает правильно, только не загрузка. Нужно ли конвертировать все в наборы, чтобы это работало?

Ответы [ 2 ]

1 голос
/ 22 апреля 2009

Я помню, что у меня были проблемы с

<list> 

и прибегают к

<bag> 

вместо сопоставления с интерфейсом .NET IList. Не уверен, что это решит вашу проблему.

Что может быть полезно, так это посмотреть, как фактический SQL, попадающий в базу данных, отличается от того, что вы ожидаете, включив запись в console.out ( см. Этот блог )

0 голосов
/ 22 апреля 2009

Разве это не вызвано тем, что ваша коллекция OrderItems загружена лениво? Если вы указываете lazy = false в отображении списка (или пакета), это больше не должно иметь место.

Вопрос в том, хотите ли вы лениво загружать элементы OrderItems или нет? :)

...