1

以下のような NHibernate で使用されるドメイン モデルのシナリオがあります。

public class BaseClass
{
  public virtual int Id { get; set; }
  public virtual string SomeProperty { get; set; }
}

public class FirstClass : BaseClass 
{
  public virtual IList<AnotherClass> AnotherClassList  { get; set; }
}

public class SecondClass : BaseClass 
{
  public virtual AnotherClass AnotherClass  { get; set; }
}

public class AnotherClass 
{
  public virtual int Id { get; set; }
  public virtual BaseClass MyNavigationalProperty  { get; set; }
}

見た目はいいのですが、期待していたようには機能しません。これが私のシナリオです。

最初のステップとして、FirstClass を 1 つまたは複数の AnotherClass と共にリストに保存しています。これは完全に機能します。リスト内の関連する AnotherClasses を使用して FirstClass を取得できました。

2番目のステップでは、新しい AnotherClass を個別に保存し、最初のステップから MyNavigationalProperty を FirstClass に設定します。見た目は素晴らしいですが...

最後のステップでは、FirstClass を取得しています。AnotherClassList には、2 番目のステップからの AnotherClass が含まれていることを期待しています。しかし、最初のステップから元の AnotherClasses しか取得できません。

データベースを調べると、2 番目のステップのレコードが表示されますが、テーブル AnotherClass には BaseClass_Id と FirstClass_Id の 2 つの個別の FK があり、FirstClass_Id は NULL であるため、最終ステップでこのレコードを取得できません。

これは、ナビゲーション プロパティを実装する間違った方法ですか? もしそうなら、どうすれば適切に行うことができますか?または...単純に、これを行うより良い方法はありますか?

編集

Thilak のマッピングの問題から、別の考えが浮かびました。元のドメイン モデルは、私の実装である BaseClass を使用していませんでした。独自のマッピングを作成する必要がありますか? それは、自動マッピングを完全に放棄しなければならないということですか?

4

1 に答える 1

1

参照は別の列をコレクションとして使用します。手動で上書きできます

class SetForeignKeyColumn : IAutomappingOverride<FirstClass>
{
    public ...
    {
        instance.HasMany(x => x.AnotherClassList).KeyColumn("baseclass_id");
    }
}
于 2013-01-23T05:36:51.937 に答える