Nhibernate 为什么我的HQL查询可以工作,但条件版本不能';T

Nhibernate 为什么我的HQL查询可以工作,但条件版本不能';T,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我的(流利的)NHibernate模式有点复杂。这里讨论的两个类都是特定于国家的,并且继承自一个抽象类。这背后的要点是不同的国家数据存储在不同的表中。这一切都很好,除了以下几点。此HQL执行良好: dbSession.CreateQuery(@"from DateBlock_US db where db.HaveListing.City.LocationID = " + searchLocation.LocationID.ToString()).List<DateB

我的(流利的)NHibernate模式有点复杂。这里讨论的两个类都是特定于国家的,并且继承自一个抽象类。这背后的要点是不同的国家数据存储在不同的表中。这一切都很好,除了以下几点。此HQL执行良好:

dbSession.CreateQuery(@"from DateBlock_US db where
            db.HaveListing.City.LocationID = " + searchLocation.LocationID.ToString()).List<DateBlock>();
以我的生命来说,我看不出差异在哪里。有人能看到有什么东西向他们扑来吗?或者,是否有任何方法可以从标准(或类似标准)中获取底层HQL,以便比较它们

如果有任何帮助,我的怪异-o映射如下所示:

public class Map<T> : NotNullableClassMap<T> where T : DateBlock
    {
        public void BaseMap()
        {
            Id(b => b.m_BlockCode).Column("BlockCode").GeneratedBy.GuidComb();
            Map(b => b.StartDate);
            Map(b => b.EndDate);
            Map(b => b.BlockType);

        }
    }

public class DateBlock_US : DateBlock {
    public class DateBlock_US_Map : Map<DateBlock_US>
    {
        public DateBlock_US_Map()
        {
            base.BaseMap();
            References<HaveListing_US>(b => b.HaveListing).Column("HaveListing_US_id");
        }
    }
}
公共类映射:NotNullableClassMap,其中T:DateBlock
{
public void BaseMap()
{
Id(b=>b.m_BlockCode).Column(“BlockCode”).GeneratedBy.GuidComb();
Map(b=>b.StartDate);
Map(b=>b.EndDate);
Map(b=>b.BlockType);
}
}
公共类日期块:日期块{
公共类日期块映射:映射
{
公共日期块_US_映射()
{
base.BaseMap();
参考文献(b=>b.HaveListing).Column(“HaveListing_US_id”);
}
}
}

就像我说的,除了这个,它在任何方面都可以正常工作。

解决方案似乎是添加CreateAlias,如下所示:

dbSession.CreateCriteria(typeof(DateBlock_US))
        .CreateAlias("HaveListing","h")
        .Add(Restrictions.Eq("h.City.LocationID", searchLocation.LocationID))
        .List<DateBlock>();
dbSession.CreateCriteria(typeof(DateBlock_US))
.CreateAlias(“HaveListing”、“h”)
.Add(Restrictions.Eq(“h.City.LocationID”,searchLocation.LocationID))
.List();
然而,如果有人能解释为什么这是必要的,我将非常感激

public class Map<T> : NotNullableClassMap<T> where T : DateBlock
    {
        public void BaseMap()
        {
            Id(b => b.m_BlockCode).Column("BlockCode").GeneratedBy.GuidComb();
            Map(b => b.StartDate);
            Map(b => b.EndDate);
            Map(b => b.BlockType);

        }
    }

public class DateBlock_US : DateBlock {
    public class DateBlock_US_Map : Map<DateBlock_US>
    {
        public DateBlock_US_Map()
        {
            base.BaseMap();
            References<HaveListing_US>(b => b.HaveListing).Column("HaveListing_US_id");
        }
    }
}
dbSession.CreateCriteria(typeof(DateBlock_US))
        .CreateAlias("HaveListing","h")
        .Add(Restrictions.Eq("h.City.LocationID", searchLocation.LocationID))
        .List<DateBlock>();