Consider the following simplified domain:
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; }
}
A MovieDetail
cannot exist without a Movie
, but a Movie
could exist without a MovieDetail
(i.e. we have no details about it).
Our database has a separate table for Movie
with columns Id
, and a separate table for MovieDetail
with columns Id
and MovieId
. There is also a foreign key from MovieDetail.MovieId
to Movie.Id
.
We've got this all mapped in NHibernate, but when getting a collection of Movie
instances, we want a left outer join with MovieDetail
. If not, we could have a N+1 problem when iterating over the Movie
instances. That is the case now: there is a separate query for every call to the Movie.MovieDetail
property.
I've tried one-to-one
mapping, but that seems to be for the case when you have both instances. In our case, we don't always have a MovieDetail
. Also, they don't share the same primary key.
I've researched formula's, but that would require me to make my MovieDetail
implement IUserType
, essentially putting NHibernate into my domain. I'd like to avoid that.