2

次の簡略化されたドメインを考えてみましょう。

public class Movie
{
    public virtual int Id { get; set; }
    public virtual MovieDetail MovieDetail { get; set; }
}

public class MovieDetail
{
    public virtual int Id { get; set; }
    public virtual Movie Movie { get; set; }
}

MovieDetailは なしでは存在できませんがMovie、は なしで存在するMovie可能性がありますMovieDetail(つまり、詳細はわかりません)。

私たちのデータベースには、Moviewith columns用の別のテーブルと、 with columnsおよびId用の別のテーブルがあります。からへの外部キーもあります。MovieDetailIdMovieIdMovieDetail.MovieIdMovie.Id

これはすべて NHibernate でマップされていますがMovie、インスタンスのコレクションを取得するときは、 との左外部結合が必要MovieDetailです。Movieそうでない場合、インスタンスを反復処理するときに N+1 問題が発生する可能性があります。それが今のケースです。プロパティへの呼び出しごとに個別のクエリがありMovie.MovieDetailます。

マッピングを試みましone-to-oneたが、両方のインスタンスがある場合のようです。私たちの場合、常にMovieDetail. また、それらは同じ主キーを共有しません。

数式を調査しましたが、それには自分のMovieDetailimplementを作成する必要がありIUserType、基本的に NHibernate を自分のドメインに入れます。それは避けたいです。

4

2 に答える 2