Nhibernate查询版本中的Guid限制
我有两个最简单的实体,类似于:Nhibernate查询版本中的Guid限制,nhibernate,guid,queryover,Nhibernate,Guid,Queryover,我有两个最简单的实体,类似于: public class User { int id; string name; Guid Guid; IList<Rentals> Rentals; } public class Rentals { int Id { get; protected set; } User User { get; set; } int DvdId { get; set; } } 其中,userGuid正
public class User
{
int id;
string name;
Guid Guid;
IList<Rentals> Rentals;
}
public class Rentals
{
int Id { get; protected set; }
User User { get; set; }
int DvdId { get; set; }
}
其中,userGuid
正在通过单元测试。(这就是我所知道的存在)
如果我这样做:
DetachedCriteria dc = QueryOver.Of<Rentals>()
.Where(r => r.User.Id == 1) // Note - replaced guid with id (an int)
.Select(r => r.DvdId)
.DetachedCriteria;
我使用流利的地图实体
所以。。。。如何对guid应用限制?相关实体的Id被视为
特殊的。多对一的外键总是会水合。这是因为NHibernate使用lazy loaded,所以这是完全有效的:-
.Where(r => r.User.Id == 1)
但是,这是无效的,因为在设置Guid之前需要对相关实体进行水合处理:-
.Where(r => r.User.Guid == userGuid)
因此,您需要在查询中加入User
和Rentals
,大致如下:-
.QueryOver.Of<Rentals>()
.JoinQueryOver<User>(x => x.User)
.Where(x => x.Guid == userGuid)
.QueryOver.Of()
.JoinQueryOver(x=>x.User)
.Where(x=>x.Guid==userGuid)
注意:这是未经测试的,因此任何问题都请告诉我。您也可以比较实体:
var user = session.Load<User>(userGuid);
...
.Where(r => r.User == user)
var user=session.Load(userGuid);
...
.Where(r=>r.User==User)
太棒了!现在,我不仅知道我需要做什么才能让它工作,而且我也知道为什么它不工作!非常感谢。如果可以的话,我会不止一次地把它翻出来!
.QueryOver.Of<Rentals>()
.JoinQueryOver<User>(x => x.User)
.Where(x => x.Guid == userGuid)
var user = session.Load<User>(userGuid);
...
.Where(r => r.User == user)