1

いくつかの継承を持つモデルがあり、nhibernate を使用してデータベースに永続化しています。流暢な nhibernate を使用した nhibernate マッピングは正常に機能していますが、既存の親のために子を保存する必要があるシナリオがあります。私のモデルは次のようになります。

public class Item
{
   public long Id { get; set; }
   public string Name { get; set; }
   // other properties
}

public class ItemCommercial : Item
{
   public decimal Value { get; set; }
   // other properties
} 

私のデータベースでは、それぞれのテーブルはId <-> Id(1 対 1) で関連付けられています。

データベースItemCommercialに存在するインスタンスのみを保存する方法を知りたいです。Item私はアイテムのIDを持っていますが、サンプルのために新しいアイテムを作成する代わりに、子供だけを言うために休止状態にする方法がわかりません:

session.Save(itemCommercialObj); // will create a Item and ItemCommercial with the same Id

ありがとうございました。

4

2 に答える 2

0

そのようなオブジェクトの runtimetype はできないため、NH はそれをサポートしていません。にデザインを変更

public class Item
{
    public long Id { get; set; }
    public string Name { get; set; }
    public CommercialValue CommercialValue { get; set; }
    // other properties
}

public class CommercialValue
{
    public Item Item { get; set; }
    public decimal Value { get; set; }
    // other properties
}

および 1 対 1 のマッピング。次に、CommercialValue プロパティを設定するのと同じくらい簡単です。

于 2013-07-24T14:37:55.850 に答える
0

私もここで答えたように

いいえ、すでに永続化されているオブジェクトをそのサブクラスに「アップグレード」することはできません。Nhibernate は単にこれをサポートしていません。サブクラスを基本クラスと同じ ID で保護すると、Nhibernate はメンバーへの参照を作成する代わりに、オブジェクトの新しい ID でコピーを作成するだけです...

したがって、基本的にはどちらかを行うことができます

  1. Customer のデータを Member にコピーし、Customer を削除して Member を保存する
  2. Member が独自の ID と Customer への参照を持つ別のテーブルである、サブクラスなしで別のオブジェクト構造を使用する
  3. ネイティブSQLを使用して行をメンバーに挿入します...
于 2013-10-15T20:34:25.443 に答える