My(Fluent)NHibernateスキーマは少し複雑です。ここで問題になっている2つのクラスは、どちらも国固有であり、抽象クラスを継承しています。その背景には、異なる国のデータが異なるテーブルに格納されているということがあります。以下を除いて、すべて正常に動作します。このHQLはうまく実行されます:HQLクエリは機能するが、Criteriaバージョンは機能しないのはなぜですか?
dbSession.CreateQuery(@"from DateBlock_US db where
db.HaveListing.City.LocationID = " + searchLocation.LocationID.ToString()).List<DateBlock>();
(私はSetParameterを使うべきですが、これはデモです)。しかし、この基準は動作しません:
dbSession.CreateCriteria(typeof(DateBlock_US))
.Add(Restrictions.Eq("HaveListing.City.LocationID", searchLocation.LocationID))
.List<DateBlock>();
の私にエラーを与える:違いがある可能性がありどこ私は、私の人生のために、見ることができない
could not resolve property: HaveListing.City.LocationID of: Dm.Mvc.Data.UserObjects.DateBlock_US
。誰かが彼らに飛び出して何かを見ることができますか?あるいは、Criteria(または同様のもの)から基になる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");
}
}
}
私はそれはこの1つを除いてあらゆる方法で正常に動作し、言ったように。