2012-06-03 2 views
2

Я 2 POCO которые отображаются как таковые:NHibernate отображения создания дубликатов внешних ключи

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="APPayment" table="APPayments"> 
     <id name="PaymentId"> 
      <generator class="guid" /> 
     </id> 
     <many-to-one name="Invoice" class="APInvoice" cascade="none" 
      column="InvoiceId" index="ixPaymentInvoice" not-null="true" /> 
    </class> 
    <class name="APInvoice" table="APInvoices"> 
     <id name="InvoiceId"> 
      <generator class="guid" /> 
     </id> 
     <bag name="Payments" inverse="true" cascade="none" > 
      <key column="PaymentId" foreign-key="fkInvoicePayments" /> 
      <one-to-many class="APPayment" /> 
     </bag> 
    </class> 
</hibernate-mapping> 

По некоторым причинам я не могу понять, я генерации дублирует внешние ключи на моей APPayments таблицы:

fk9cdfbf509640182e 
fkinvoicepayments 

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

+0

Я не могу найти ошибку в сопоставлении, у меня было много проблем, подобных этому при работе пару лет назад с NHibernate, но использование Fluent NHibernate для сопоставлений мне очень помогло. В строгой теории записи сопоставлений с Fluent NHibernate должны быть совершенно такими же, как написание XML-сопоставления, но беглый dsl скрывает многие жесткие конфигурации в качестве внешних ключей. – rsan

ответ

2

Вот ваша проблема:

<key column="PaymentId" ... 

key в коллекции должны быть InvoiceID.

+0

Я пробовал оба. Неявное обозначение fk делает 2 fx длинными шестнадцатеричными именами; явно называя fk с обеих сторон, генерирует ошибку, которая уже существует fk. –

+0

Так было. Спасибо за вашу помощь! –