4

我使用 NHiberNate 编写了一个联合查询,但我得到一个 NHibernate.QueryException:not an association: 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()

有人可以帮助并让我知道为什么我收到“不是关联:Id”错误。我在“显示”表中有 id,它是一个主键。

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

4

2 回答 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,但即便如此也仅将其映射为只读。

于 2013-07-08T07:36:45.993 回答
0

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

NHibernate 查询中的 Join 仅由您导航到其他属性的属性名称指定。

这就是错误消息的含义。Id不是一个协会。

于 2019-11-26T08:09:57.403 回答