0

ReportRow(親)とMark(子)の間にこの関係があります

<class name="ReportRow">
    <bag name="Marks" cascade="save-update" inverse="true">
      <key column="ReportRowId"/>
      <one-to-many class="Mark"/>
    </bag>
</class>

// C# code
public virtual IList<Mark> Marks { get; set; }

ただし、保存されていません(Markテーブルでは、ReportRowIdは常にnullです)。

NHibernateの「癖」のために、これらの関係は常に双方向でなければならないことを私は知っているので、私のMarkクラスには次のようになります。

<many-to-one name="ReportRow" class="ReportRow" column="ReportRowId" />

// C#
public virtual ReportRow ReportRow { get; set; }

この種の関係がプロジェクトの他の場所で機能している例もいくつかありますが、これは機能しておらず、それ以外の違いはわかりません...

... MarkとReportRowの両方にサブクラス(例:ModuleMarkとModuleReportRow)があり、継承を実装するために結合サブクラス戦略を使用しています。

それはそれと関係がありますか?関係の両端では、マッピングは、マッピング内にネストされるのではなく、親クラスのマッピングで定義され<joined-subclass>ます。

ありがとう

4

1 に答える 1

0

マークをどのようにコレクションに追加していますか? コレクションはリレーションシップの逆側であるため、子をコレクションに追加するときに、子の親オブジェクトへの参照を設定する必要があります。一般的なアプローチは、親オブジェクトのメソッドを使用して関係を維持することです。次に例を示します。

   public void AddMark(Mark mark)
   {
      mark.ReportRow = this;
      Marks.Add(mark); // better yet map the collection as a private field
   }

「逆」とは「この関係で誰がパンツをはいているか」と考えています。

于 2012-11-08T14:08:54.160 に答える