流畅的NHibernate映射与外键关系

时间:2013-12-13 10:57:16

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

这是Drops Table的流畅地图

this.Table("Drops");
this.LazyLoad();
this.Id(x => x.Guid).GeneratedBy.Guid().Column("Guid");
this.References(x => x.User).column("UserGuid");
this.Map(x => x.FromLocation).Column("FromLocation").Not.Nullable().Length(50);
this.Map(x => x.ToLocation).Column("ToLocation").Not.Nullable().Length(50);
this.Map(x => x.Time).Column("Time").Not.Nullable();

这是我的用户表

this.Table("Users");
this.LazyLoad();
this.Id(x => x.Guid).GeneratedBy.Guid();
this.Map(x => x.SessionId).Unique().Column("SessionId");
this.Map(x => x.UserName).Unique().Column("UserName");
this.Map(x => x.Password).Column("Password");
this.Map(x => x.NickName).Column("NickName");
this.Map(x => x.FirstName).Column("FirstName");
this.Map(x => x.LastName).Column("LastName");
this.Map(x => x.Gender).Column("Gender");

因此,Drops包括User表,

当我添加drop table时,它会正确添加。

我需要的是,我需要使用用户SessionId获取drop对象列表。

我使用下面的代码来获取drop collection,

session.QueryOver<Drop>().Where(d => d.UserGuid != user.Guid).List();

但我收到了错误,

  

无法解析属性:UserGuid:   ********* **********。BusinessObjects.Drop

我检查了删除表,添加了UserGuid列

enter image description here

如何获取下拉列表或问题是什么?

谢谢,

1 个答案:

答案 0 :(得分:1)

不应该是:

session.QueryOver<Drop>().Where(d => d.User.SessionId != user.SessionId).List();

如果您按用户会话ID查找(或在您的情况下将其排除)。

修改

抱歉,我对初始点感到非常不满,因为我错过了你需要为用户对象定义别名的事实。尝试:

User alias = null;
session.QueryOver<Drop>().JoinAlias(d=>d.User,()=>alias).Where(d => alias.SessionId != user.SessionId).List();