我使用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()
有人可以帮忙,让我知道为什么我会得到一个&#34;而不是一个协会:Id&#34;错误。我在&#34; Show&#34;表,它是主键。
请指教。非常感谢所有帮助。
非常感谢
答案 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
不是关联。