Я весь день стуча головой в стол со следующей проблемой Nhibernate.Nhibernate Проблема с отображением одного-на-один с ошибкой ввода дочернего объекта
Каждый банковский счет имеет один (и только один) набор тарифов, связанных с ним. Первичным ключом таблицы банковского счета, BankAccountID также является внешний ключ и первичный ключ в таблице AccountRate.
public class BankAccount
{
public virtual int BankAccountId { get; set; }
public virtual string AccountName { get; set;}
public virtual AccountRate AccountRate {get;set;}
}
public class AccountRate
{
public virtual int BankAccountId { get; set; }
public virtual decimal Rate1 { get; set; }
public virtual decimal Rate2 { get; set; }
}
У меня есть следующие отображения HBM для BankAccount:
<class name="BankAccount" table="BankAccount">
<id name ="BankAccountId" column="BankAccountId">
<generator class="foreign">
<param name="property">
AccountRate
</param>
</generator>
</id>
<property name ="AccountName" column="AccountName" />
<one-to-one name="AccountRate" class="AccountRate" constrained="true" cascade="save-update"/>
</class>
и следующие за AccountRate:
<class name="AccountRate" table="AccountRate">
<id name ="BankAccountId" column="BankAccountId">
<generator class="native" />
</id>
<property name ="Rate1" column="Rate1" />
<property name ="Rate2" column="Rate2" />
</class>
Существующий объект BankAccount можно прочитать из базы данных без проблем. Однако, когда создается новый BankAccount, оператор insert не работает;
Cannot insert the value NULL into column 'BankAccountId'
Проблема заключается в том, что сначала создается дочерний объект AccountRate. Поскольку он еще не получил идентификатор из своего родителя, вставка не работает.
Я думаю, что я прав, говоря, что если свойство AccountRate на BankAccount было коллекцией, я мог бы использовать следующее?
Inverse=True
, чтобы заставить родителя быть вставленным первым.
Может ли кто-нибудь помочь мне с этим? i На самом деле не хочу использовать коллекцию, между этими таблицами существует только однонаправленная связь «один-к-одному».
Благодаря
Пол
Подтвердите, что работа выполнена должным образом. – Darius