QueryException:无法解析属性:B.C of:A]

时间:2012-01-09 15:30:18

标签: sql asp.net-mvc-3 nhibernate fluent-nhibernate queryover

我有一个类似这样的查询:

B BAlias = null;
C CAlias = null;

session.QueryOver<A>().Left.JoinAlias(x => x.B, () => BAlias).Left.JoinAlias(() => B.C, () => CAlias);


Query.Where(() => CAlias == C);

Query.And(() => BAlias.Id == Guid.Parse(SearchColumn));

Query.And(x => x.SomeData == data_string);


return Query.OrderBy(() => B.Name).Desc
                                .Skip(skip)
                                .Take(take)
                                .List<A>();

基本上,我需要通过B加载具有C的间接属性的A对象列表。(希望这听起来不会太混乱)

我无法让它工作,为这种“子查询”获取错误,任何想法如何编码才能工作?

修改

按查询添加订单。

错误的形式为:

无法解析属性:B.C of:A

编辑2:

映射如下:

public void Override(AutoMapping<A> mapping)
    {
        mapping.References<B>(x => x.B).Not.Nullable().Not.LazyLoad();
    }

public void Override(AutoMapping<B> mapping)
    {
        mapping.References(x => x.C).Not.Nullable().Cascade.SaveUpdate();
    }

public void Override(AutoMapping<C> mapping)
    {
        mapping.Map(x => x.Name).CustomSqlType("VARCHAR(255)").Not.Nullable().Unique();
    }


public class A: BaseEntity<A>
{

    public virtual B B{ get; set; }
    public virtual string SomeData{ get; set; }
}


public class B: BaseEntity<B>
{

    public virtual C C{ get; set; }
    public virtual string Name{ get; set; }
}

public class C: BaseEntity<C>
{
    public virtual string Name{ get; set; }
    public virtual string Description{ get; set; }
}

2 个答案:

答案 0 :(得分:0)

使用JoinQueryOver

错误表示您正在使用B.C,就好像它是属性名称一样,但事实并非如此。 JoinQueryOver使您可以通过属性的属性进行查询。

答案 1 :(得分:0)

B.C应该是BAlias.C