C# NHibernate连接多个表

C# NHibernate连接多个表,c#,nhibernate,C#,Nhibernate,我在网上搜索过,找不到满意的答案 我正在尝试编写QueryOver/CreateCriteria查询,以便在连接3个表之后从1个表中获取字段 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.VI

我在网上搜索过,找不到满意的答案

我正在尝试编写QueryOver/CreateCriteria查询,以便在连接3个表之后从1个表中获取字段

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
//加入别名以便于访问查询的所有部分
VisitorVisitorVisitalias=null;
访问visitAlias=null;
VisitorLayEntryPoints=visitorLayEntryPointsAlias=null;
IList位置ID=
session.QueryOver()
.JoinAlias(()=>visitorVisitAlias.VisitId,()=>visitAlias)
.JoinAlias(()=>visitAlias.VepId,()=>visitorLayEntryPointsAlias)
//取决于你的LocId在哪里
.选择(()=>visitorVisit.LocId)
//我假设您的LocId是int,如果是字符串,请切换到string
.List();
当然,只有在映射配置(XML或Fluent-NHibernate)中设置了正确的关联时,所有这些才起作用,您应该在映射配置中定义两个连接条件

  • 多对一(对象引用):
  • 多对多或一对多(集合参考):

  • 这将有助于提供此查询中三个表的更多上下文或模式。例如,我不确定哪个表
    LOC\u ID
    来自哪个表。此外,如果需要只返回一列,则可能需要考虑有关投影的阅读。
    // 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>();