NHibernate.QueryException:不是关联:Id

NHibernate.QueryException:不是关联:Id,nhibernate,fluent-nhibernate,linq-to-nhibernate,Nhibernate,Fluent Nhibernate,Linq To Nhibernate,我使用NHiberNate编写了一个联合查询,但是我得到了一个NHiberNate 这就是NHibernate库的外观 TicketRequest ticketAlias = null; Show showAlias = null; IList<TicketRequest> results = UnitOfWork.CurrentSession.QueryOver<TicketRequest>(() => ticketAlias)

我使用NHiberNate编写了一个联合查询,但是我得到了一个NHiberNate

这就是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;
有人可以帮助我,让我知道为什么我得到一个“非关联:Id”错误。我在“Show”表中有id,它是主键


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

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

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

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

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

NHibernate查询中的联接仅由导航到其他属性的属性名称指定

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

这就是错误消息的意思<代码>Id不是一个关联。

您可以发布模型或Hibernate表映射类吗?我将在我的电脑上提取源代码,然后在这里发布。这是的映射类TicketRequest@user2510115命名空间MarilynDenisServices.Core.FluentMapping{public class TicketRequestMap:ClassMap{public TicketRequestMap(){Id(x=>x.Id).GeneratedBy.Native().UnsavedValue(“0”);Map(x=>x.Name).Not.Nullable();Map(x=>x.StreetAddress).Not.Nullable();Map(x=>x.CancelationDate);Map(x=>x.ShowID);References(x=>x.Show);}}@user2510115这是Show class
命名空间MarilynDenisServices.Core.FluentMapping公共类ShowMap:ClassMap{public ShowMap(){Id(x=>x.Id).GeneratedBy.Native().UnsavedValue(“0”);Map(x=>x.ShowDate).Unique().Not.Nullable();Map(x=>x.Notes).Length(10000);Map(x=>x.ticketseats).Not.Nullable();Map(x=>x.ModifiedDate).Not.Nullable();HasMany(x=>x.TicketRequests).Inverse().Cascade.deleteOrvan();}}