4

私には2つのエンティティPersonとAddressがあり、Personには1つのAddressがあります。

編集:アドレスはすでに存在します。外部キーを保存したいだけです。

私がこれをするとき:

  PersonDTO person = new PersonDTO();
    person.Age = "Bob";
    person.Address = new AddressDTO {Key = 123};
    Save(person);

この例外が発生します:

列'Key'、テーブル'Address'に値NULLを挿入できません。列はnullを許可しません。INSERTは失敗します。ステートメントは終了しました。

Personからのマッピングファイルフラグメント

<class name="PersonDTO" table="Person" xmlns="urn:nhibernate-mapping-2.2">
    <id name="Key" column="PersonKey" type="Guid">
      <generator class="guid" />
    </id>
    <one-to-one name="Address" class="AddressDTOl" />
  </class>

なぜこれが発生するのかわかりません。アドレスキーに値を指定しています。私のアプローチには欠陥がありますか?

4

3 に答える 3

2

あなたはこれをする必要があります

AddressDTO add = new AddressDTO {Key = 123};
Save(add);

PersonDTO person = new PersonDTO();
person.Age = "Bob";
person.Address = add;
Save(person);

または、アドレスを明示的に保存したくない場合は、マッピングを変更します。

<many-to-one name="Address" column="..." class="AddressDTO" cascade="save-update" />

アドレスがすでに存在する場合は、データベースから取得する必要があります。

PersonDTO person = new PersonDTO();
person.Age = "Bob";
person.Address = GetAddressDTO( 123 );
Save(person);
于 2009-02-26T13:05:11.710 に答える
0

個人を保存する前に、住所を保存する必要があります。ジェネレーターによっては、IDを渡すセーブオーバーロードを使用する必要がある場合があります。

保存を暗黙的にする必要がある場合は、個人のアドレスプロパティのカスケードを設定する必要があります。

于 2009-02-26T12:58:10.073 に答える