Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate查询版本中的Guid限制_Nhibernate_Guid_Queryover - Fatal编程技术网

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)