2017-06-11 9 views
1

私はウェブを検索して満足のいく答えを見つけることができませんでした。NHibernateが複数のテーブルに参加する

3つのテーブルを結合した後に1つのテーブルからフィールドを取得するために、QueryOver/CreateCriteriaクエリを作成しようとしています。

SQLクエリ自体はシンプルですが、私はそれを上記の形式に変換できませんでした。

クエリ:もちろん

select LOC_ID from 
VISITOR_VISIT vv 
join VISIT v on vv.VISIT_ID = v.VISIT_ID 
join VISITOR_LAY_ENTRY_POINTS vlep on vlep.VLEP_ID = v.VEP_ID 
where vv.VIS_ID = PARAMETER 
+0

かあなたがこのクエリで持っている3つのテーブルのスキーマ。 たとえば、 'LOC_ID'テーブルがどこから来たのかわかりません。 また、1つの列だけを返す必要がある場合は、予測についてお読みください。 http://nhibernate.info/doc/nhibernate-reference/queryqueryover.html#queryqueryover-projections –

答えて

1
// Join aliases for ease of getting access to all parts of the query 
VisitorVisit visitorVisitAlias = null; 
Visit visitAlias = null; 
VisitorLayEntryPoints = visitorLayEntryPointsAlias = null; 

IList<int> locationIds = 
    session.QueryOver<VisitorVisit>() 
    .JoinAlias(() => visitorVisitAlias.VisitId,() => visitAlias) 
    .JoinAlias(() => visitAlias.VepId,() => visitorLayEntryPointsAlias) 

    // Depends on where your LocId is 
    .Select(() => visitorVisit.LocId) 

    // I assumed your LocId is an int, switch to string if it's a string 
    .List<int>(); 

これだけの作品のすべてのあなたは2を定義する必要があるところであるあなたのマッピングの設定(XMLまたは流暢NHibernateは)に設定し、右の関連を持っている場合条件を結合する。

  1. 多対一(オブジェクト参照):http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-manytoone
  2. 多対多または1対多(コレクション参考):http://nhibernate.info/doc/nhibernate-reference/collections.html#collections-ofvalues
それはより多くのコンテキストを提供するために役立つだろう
関連する問題