Я пытаюсь отобразить относительно простой сценарий родитель-потомок (Invoice-InvoiceEntry) в NHibernate. Вот некоторые части моих картографических файлов:
из Invoice.hbm.xml
<set name="InvoiceEntries" table="InvoiceEntries" inverse="true" cascade="all-delete-orphan" lazy="false">
<key column="InvoiceID" />
<one-to-many class="Jobflow.Models.Entities.InvoiceEntry, Jobflow" />
</set>
из InvoiceEntry.hbm.xml
<many-to-one name="Invoice" class="Jobflow.Models.Entities.Invoice, Jobflow" column="InvoiceID" not-null="true" lazy="false" />
из Invoice.cs
private ISet<IInvoiceEntry> _invoiceEntries = new HashedSet<IInvoiceEntry>();
public virtual ISet<IInvoiceEntry> InvoiceEntries
{
get { return _invoiceEntries; }
set { _invoiceEntries = value;}
}
Что происходит, когда я сохраняю счет, все в порядке. Новая запись вставляется в обе таблицы. Значение в столбце InvoiceID в таблице InvoiceEntries совпадает со значением столбца ID в таблице Invoices. Однако, когда я пытаюсь загрузить счет из хранилища через NHibernate, я получаю следующую ошибку:
NHibernate.ObjectNotFoundException: не существует строки с данным идентификатором [Jobflow.Models.Entities.InvoiceEntry # 55]
55 действительно является правильным идентификатором в таблице Invoices и правильным InvoiceID в таблице InvoiceEntries. Тем не менее, похоже, что NHibernate может искать InvoiceEntries PK, который вместо этого является EnvoiceEntryID.
Кто-нибудь может мне помочь с этим?