Je me suis cogné la tête contre le bureau toute la journée avec le problème Nhibernate suivant.Nhibernate Problème de mappage un-à-un avec l'erreur d'insertion d'objet enfant
Chaque compte bancaire est associé à un (et un seul) ensemble de débits. La clé primaire de la table de compte bancaire, BankAccountID, est également une clé étrangère et la clé primaire de la table 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; }
}
J'ai les correspondances HBM suivantes pour 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>
et les éléments suivants pour 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>
Un objet BankAccount existant peut être lu à partir de la base de données sans problème. Cependant, lorsqu'un nouveau compte bancaire est créé, l'instruction d'insertion échoue avec;
Cannot insert the value NULL into column 'BankAccountId'
Le problème semble être que l'objet enfant, AccountRate est créé en premier. Comme il n'a pas encore reçu d'identifiant de son parent, l'insertion échoue.
Je pense que j'ai raison de dire que si la propriété AccountRate sur BankAccount était une collection, je pourrais utiliser ce qui suit?
Inverse=True
afin de forcer le parent à être inséré en premier.
Quelqu'un peut-il m'aider avec ceci? Je ne veux vraiment pas utiliser une collection, il n'y a qu'une relation unidirectionnelle un-à-un entre ces tables.
Merci
Paul
Confirmer que cela fonctionne comme prévu. – Darius