我使用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,这是一个主键。
请告知。非常感谢所有帮助。
您需要在联接中指定多对一关系。您的情况是Show
属性。
IList<TicketRequest> results = UnitOfWork.CurrentSession.QueryOver<TicketRequest>(() => ticketAlias)
.JoinAlias(() => ticketAlias.Show, () => showAlias)
.Where(() => showAlias.ShowDate >= DateTime.Now)
.List();
PS:您不应同时映射多对一关系(Show
)和外键属性(ShowID
)。通常,仅在使用ORM时才处理对象关系。仅在您确实需要普通ID时才对其进行映射,但即使那样,也仅将其映射为只读。
使用NHibernate查询时,您不必指定外键/主键。这是一个ORM。您编写面向对象的查询。键和关系在映射文件中指定。
NHibernate查询中的联接只是通过导航到另一个属性的属性名称指定的。
这就是错误消息的含义。 Id
不是关联。