NHibernate.QueryException:不关联:ID

问题描述 投票:4回答:2

我使用NHiberNate编写了一个联合查询,但是我得到了NHibernate.QueryException:不是关联:Id

这就是NHibernate库的外观

TicketRequest ticketAlias = null;
        Show showAlias = null;

        IList<TicketRequest> results = UnitOfWork.CurrentSession.QueryOver<TicketRequest>(() => ticketAlias)
                  .JoinAlias(() => ticketAlias.ShowId, () => showAlias.Id)
                  .Where(() => showAlias.ShowDate >=DateTime.Now)
                  .List();

        return results;

我只想要一个简单的联合语句,这就是在SQL中的样子

select * from TicketRequest as a join Show as b
on a.Show_id = b.Id
where ShowDate >=GETDATE()

[有人可以帮忙,让我知道为什么我收到“ not a association:Id”错误。我在“显示”表中有ID,这是一个主键。

请告知。非常感谢所有帮助。

nhibernate fluent-nhibernate linq-to-nhibernate
2个回答
1
投票

您需要在联接中指定多对一关系。您的情况是Show属性。

IList<TicketRequest> results = UnitOfWork.CurrentSession.QueryOver<TicketRequest>(() => ticketAlias)
    .JoinAlias(() => ticketAlias.Show, () => showAlias)
    .Where(() => showAlias.ShowDate >= DateTime.Now)
    .List();

PS:您不应同时映射多对一关系(Show)和外键属性(ShowID)。通常,仅在使用ORM时才处理对象关系。仅在您确实需要普通ID时才对其进行映射,但即使那样,也仅将其映射为只读。


0
投票

使用NHibernate查询时,您不必指定外键/主键。这是一个ORM。您编写面向对象的查询。键和关系在映射文件中指定。

NHibernate查询中的联接只是通过导航到另一个属性的属性名称指定的。

这就是错误消息的含义。 Id不是关联。

© www.soinside.com 2019 - 2024. All rights reserved.