QueryOver失败,无法解析属性:

时间:2012-04-03 19:19:50

标签: nhibernate linq-to-nhibernate nhibernate-criteria

我正在使用NHibernate 3.0并且正在比较Query和QueryOver

var p = _prepo.Query<Party>()
            .Where(c => c.Person.LastName == "Bobby")
            .FirstOrDefault();

上面的工作,如果我查看对象图,我会获得p.Person的代理类。

var p = _prepo.QueryOver<Party>()
            .Where(c => c.Person.LastName == "Bobby")
            .FirstOrDefault();

这个失败,错误==&gt;无法解析属性:Person.LastName of:

为什么?

2 个答案:

答案 0 :(得分:6)

我不熟悉Linq提供程序,但在使用QueryOver时,您必须使用联接来执行类似的查询:

示例1

IQueryOver<Cat,Kitten> catQuery =
session.QueryOver<Cat>()
    .JoinQueryOver(c => c.Kittens)
        .Where(k => k.Name == "Tiddles");

示例2

Cat catAlias = null;
Kitten kittenAlias = null;

IQueryOver<Cat,Cat> catQuery =
    session.QueryOver<Cat>(() => catAlias)
        .JoinAlias(() => catAlias.Kittens, () => kittenAlias)
        .Where(() => catAlias.Age > 5)
        .And(() => kittenAlias.Name == "Tiddles");

答案 1 :(得分:0)

在这种情况下使用Linq时,它会起作用,因为过滤是在客户端上进行的,而不是在数据库中。所以它实际上是运行Where的IEnumerable版本,它与NHibernate无关。

QueryOver使用Expression<Func<T,object>> NHibernate尝试转换为SQL但失败。由于我不知道的原因,您必须使用JoinQueryOver或JoinAlias明确加入。

有关QueryOver的更多信息,请点击此处: http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html