次の Nhibernate の問題で、一日中机に頭をぶつけています。
各銀行口座には、関連付けられたレートのセットが 1 つ (1 つだけ) あります。銀行口座テーブルの主キーである 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; }
}
BankAccount の次の HBM マッピングがあります。
<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 が最初に作成されることです。Parent から識別子をまだ取得していないため、挿入は失敗します。
BankAccount の AccountRate プロパティがコレクションである場合、次を使用できると言うのは正しいと思いますか?
Inverse=True
親を最初に強制的に挿入するため。
誰でもこれで私を助けることができますか?私は本当にコレクションを使用したくありません.これらのテーブル間には一方向の1対1の関係しかありません.
ありがとう
ポール