考慮以下簡化域:預先加載一個可選一到一個與NHibernate
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
與Id
列一個單獨的表,和MovieDetail
與列Id
和MovieId
一個單獨的表。還有一個從MovieDetail.MovieId
到Movie.Id
的外鍵。我們已經將這一切都映射到了NHibernate中,但是當獲得Movie
實例的集合時,我們需要一個包含MovieDetail
的左外連接。如果不是這樣,那麼迭代Movie
實例時可能會出現N + 1問題。現在就是這種情況:每次調用Movie.MovieDetail
屬性都有一個單獨的查詢。
我試過one-to-one
映射,但似乎是當你有兩個實例的情況下。在我們的案例中,我們並不總是有一個MovieDetail
。此外,他們不共享相同的主鍵。
我研究過公式,但那需要我讓我的MovieDetail
實現IUserType
,基本上把NHibernate放到我的域中。我想避免這種情況。
我無法讓它工作。可能的話,我們的領域有些異域風情(我簡化了它)。屬性應該是虛擬的(他們是)。 – Peter 2013-05-15 07:39:44