NHibernate.QueryException:不是关联:Id

时间:2013-07-07 15:21:34

标签: nhibernate fluent-nhibernate linq-to-nhibernate

我使用NHiberNate写了一个联合查询,但是我得到了一个N​​Hibernate.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()

有人可以帮忙,让我知道为什么我会得到一个&#34;而不是一个协会:Id&#34;错误。我在&#34; Show&#34;表,它是主键。

请指教。非常感谢所有帮助。

非常感谢

2 个答案:

答案 0 :(得分: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,但即使这样只将其映射为只读。

答案 1 :(得分:0)

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

只需通过属性名称指定NHibernate查询中的Join,即可使用该名称导航到另一个属性。

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