Nhibernate Queryover中的Guid限制



我有两个最简单的实体,类似于:

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; }
}    

(我已经声明了所有的公共虚拟属性,只是为了简化起见,这里没有提及它)

假设每个User将有许多Rentals,我想通过某个用户的Guid来选择该用户的所有DvdId

我遇到了一个例外,这个:could not resolve property: User.Guid

这就是我在我的存储库中所做的:

DetachedCriteria dc = QueryOver.Of<Rentals>()
    .Where(r => r.User.Guid == userGuid)
    .Select(r => r.DvdId)
    .DetachedCriteria;

其中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比较做些什么。。

我的guid映射如下:(在UserMap类下)

Map(x => x.Guid, "Guid")
    .Not.Nullable();

我正在流利地使用来映射实体。

所以。。。。我该如何对guid应用限制?

相关实体的Id被视为special。多对一的外键总是会得到补充。这是因为NHibernate使用懒惰加载,所以这是完全有效的:-

 .Where(r => r.User.Id == 1)

但是,这是无效的,因为在设置Guid之前需要对相关实体进行水合:-

.Where(r => r.User.Guid == userGuid) 

因此,您需要在查询中加入UserRentals,大致如下:-

 .QueryOver.Of<Rentals>()
 .JoinQueryOver<User>(x => x.User)
 .Where(x => x.Guid == userGuid)

注意:这是未经测试的,所以有任何问题请告诉我。

您还可以比较实体:

var user = session.Load<User>(userGuid);
...
.Where(r => r.User == user)

相关内容

  • 没有找到相关文章

最新更新