2012-09-29 98 views
3

多個表我有這個表:加入與NHibernate和QueryOver

Person -> PersonFavorites, PersonCompany 
PersonCompany -> Company 

我現在必須做如下選擇與NHibernate和QueryOver:

select * from Person 
    inner join PersonFavorites on Person.Id = PersonFavorites.PersonId 
    inner join PersonCompany on Person.Id = PersonCompany.PersonId 
    inner join Company on Company.Id = PersonCompany.CompanyId 
where ... 

有人可以給我一個樣,怎麼我能做到嗎? - 我的問題是,我必須加入多個Tables Person - > PersonCompany - > Company。加入人員 - > PersonCompany和Person - > PersonFavorites沒有問題 - 但是從PersonCompany - > Company的下一步。

回答

10

映射應該是類似於以下:

實體

class Person 
{ 
    Collection<PersonFavorites> favorites; 
    Collection<PersonCompany> companies; 
} 

class PersonFavorite 
{ 
    Person person; 
    Favorite favorite; 
} 

class PersonCompany 
{ 
    Person person; 
    Company company; 
} 

查詢

Person personAlias = null; 
PersonFavorites personfavouriteAlias = null; 
PersonCompany personCompanyAlias = null; 
Company companyAlias = null; 
Favorite favouriteAlias = null; 

var query = Session.QueryOver<Person>(() => personAlias) 
    .joinAlias(() => personAlias.favorites,() => personfavouriteAlias) 
    .joinAlias(() => personAlias.companies,() => personCompanyAlias) 
    .joinAlias(() => personfavouriteAlias.Favourite,() => favouriteAlias) 
    .joinAlias(() => personCompanyAlias.Company,() => companyAlias) 
+0

別名需要被初始化(例如:人personAlias =空)之前他們可以使用。否則,代碼將拋出異常。 –

+0

我試圖做類似這樣的事情,但是當我嘗試訪問第三個joinAlias中的personfavouriteAlias時,因爲它是一個集合,所以我無法訪問Favorite。相反,我只能訪問像Count這樣的Collection屬性。 – ScubaSteve