Я столкнулся со странной проблемой, касающейся составных ключей и отношений один ко многим.
У меня есть следующий класс Invoice:
public class Invoice: AccountingBase<InvoiceItem>
{
public virtual IList<InvoiceItem> InvoiceItems {.....}
}
наследуемый класс (AccountingBase) выглядит следующим образом:
public abstract class AccountingBase<TItemType> : AccountingBase where TItemType : AccountingItemBase
{
public virtual ObservableCollection<TItemType> Items { get; set; }
public abstract void AddItem(TItemType item);
}
И нижний класс:
public abstract class AccountingBase
{
public virtual Subsidiary Subsidiary {....}
public virtual int ID{ ....}
}
Класс сопоставления для счета-фактуры выглядит следующим образом:
<class name="Invoice" table="Invoice">
<composite-id>
<key-many-to-one class="Subsidiary" name="Subsidiary"/>
<key-property name="ID" column="InvoiceID" />
</composite-id>
<bag name="InvoiceItems" table="InvoiceItem" inverse="true" lazy="false">
<key>
<column name="Subsidiary" />
<column name="InvoiceID" />
</key>
<one-to-many class="InvoiceItem" />
</bag>
</class>
Теперь, когда я получаю список счетов, он работает нормально, включая ленивую загрузку каждого объекта Items. Проблема, которую я получаю, когда я выбираю счет для редактирования. Я открываю новый сеанс и пытаюсь получить тот же счет-фактуру, используя новый сеанс, но когда он загружает счет-фактуру, он не загружает элементы, он извлекает их как пустые, хотя, когда я запускаю сгенерированный SQL-файл вручную, он прекрасно работает. В чем может быть причина?
Код, который я запускаю, чтобы получить новый объект Invoice в новом сеансе, используя старый объект:
Invoice = Session.Get<Invoice>(invoice);
Когда я отлаживаю, счет-фактура имеет тип счета-фактуры, а также счет-фактура имеет 1 InvoiceItem в коллекции InvoiceItems, но новый экземпляр в Invoice, все поля заполнены, но InvoiceItems является нулевым. Что я должен знать о Nhibernate, что может вызвать такого рода ошибки?
Я пытался lazy="false"
.