Nhibernate使用查询过滤引用属性内的属性

时间:2012-06-11 07:56:32

标签: nhibernate filter queryover

我正在使用NHibernate和流畅的映射。我有以下情况:

public class A
{
     public virtual int ID{get; set;}
     public virtual B BReference {get; set;}
     public virtual string aProperty {get; set;}
}

public class B
{
    public virtual int ID {get;set;}
    public virtual string Name {get; set;}
}

public class MapA: Map<A>
{
    Id(x=> x.ID);
    Map (x=> x.aProperty);
    References(x => x.BReference);
}

public class MapB : Map<B>
{
    Id(x=>x.ID);
    Map(x=>x.Name);
}

我想要做的是过滤属性A.BReference.Name上的A对象。我正在使用查询来执行查询:

public object GetResult(ISession session)
{
   var result = session.QueryOver<A>.Where(a=> a.BReference.Name=="Value").List();
   return result;
} 

目前NHibernate正在抛出异常无法解析属性BReference.Name:A。

有没有办法克服这个问题?我现在无法更改查询转换模式,因为我们依赖它。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您必须在编写条件之前使用JoinAlias加载相关表。

B bReference = null;
var result = session.QueryOver<A>()
.JoinAlias(x => x.BReference, () => bReference, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Where(x => bReference.Name == "Value").List<A>();