次の簡略化されたドメインを考えてみましょう。
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
(つまり、詳細はわかりません)。
私たちのデータベースには、Movie
with columns用の別のテーブルと、 with columnsおよびId
用の別のテーブルがあります。からへの外部キーもあります。MovieDetail
Id
MovieId
MovieDetail.MovieId
Movie.Id
これはすべて NHibernate でマップされていますがMovie
、インスタンスのコレクションを取得するときは、 との左外部結合が必要MovieDetail
です。Movie
そうでない場合、インスタンスを反復処理するときに N+1 問題が発生する可能性があります。それが今のケースです。プロパティへの呼び出しごとに個別のクエリがありMovie.MovieDetail
ます。
マッピングを試みましone-to-one
たが、両方のインスタンスがある場合のようです。私たちの場合、常にMovieDetail
. また、それらは同じ主キーを共有しません。
数式を調査しましたが、それには自分のMovieDetail
implementを作成する必要がありIUserType
、基本的に NHibernate を自分のドメインに入れます。それは避けたいです。