Моя (свободно) схема NHibernate немного сложна.Эти два рассматриваемых класса являются специфическими для конкретной страны и наследуются от абстрактного класса.Дело в том, что данные разных стран хранятся в разных таблицах.Все работает нормально, кроме следующего.Этот HQL прекрасно работает:
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
Я не могу, на всю жизнь, увидеть, где могут лежать различия,Кто-нибудь может увидеть что-то выскакивающее из них?Или есть ли способ получить базовый HQL из критериев (или аналогичных), чтобы я мог их сравнить?
В случае, если это поможет, мое странное отображение выглядит следующим образом:
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");
}
}
}
Как я уже сказал, он отлично работает во всех отношениях, кроме этого.