Hi, i've being banging my head against the desk all day with the following Nhibernate problem.
Each bank account has one (and only one) set of rates associated with it. The primary key of the bank account table, BankAccountID is also a foreign key and the primary key in the AccountRate table.
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; }
}
I have the following HBM mappings for 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>
and the following for 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>
An existing BankAccount object can be read from the database with no problem. However, when a new BankAccount is created , the insert statement fails with;
Cannot insert the value NULL into column 'BankAccountId'
The issue appears to be that the child object , AccountRate is created first. Since it hasn't yet got an identifier from its Parent , the insert fails.
I think i'm correct in saying that if the AccountRate property on BankAccount was a collection i could use the following ?
Inverse=True
in order to force the parent to be inserted first.
Can anyone help me with this? i Really don't want to use a collection , there is only a unidirectional one-to-one relationship between these tables.
Thanks
Paul