У меня возникла проблема с определенным запросом, который я пытаюсь выполнить для простой пары соединенных классов, представленной в моем примере ниже:
Классы:
public class ParentClass
{
public virtual Guid ParentClassId { get;set;}
public virtual ChildClass ChildClassRef { get;set;}
}
public class ChildClass
{
public virtual Guid ChildClassId { get;set;}
public virtual string ChildCode { get;set;}
}
Свободные отображения:
public class ParentClassMap : ClassMap<ParentClass>
{
public ParentClassMap()
{
Id(x => x.ParentClassId).GeneratedBy.Guid();
References<ChildClass>(x => x.ChildClassRef, "ChildClassId").ForeignKey("ChildClassId").Fetch.Join();
}
}
public class ChildClassMap : ClassMap<ChildClass>
{
public ChildClassMap()
{
Id(x => x.ChildClassId).GeneratedBy.Guid();
Map(x => x.ChildCode).Not.Nullable();
}
}
Это не удалось:
DetachedCriteria criteria = DetachedCriteria.For(boType);
criteria.Add(Expression.Eq("ChildClassRef.ChildCode", "ABC"));
ICriteria runnableCriteria = detachedCriteria.GetExecutableCriteria(session);
IList ilistResult = runnableCriteria.List();
с ошибкой: «не удалось разрешить свойство: ChildClassRef.ChildCode».
Однако этот критерий работает:
criteria.Add(Expression.Eq("ChildClassRef.ChildClassId", "931DAF7A-15D1-4B0B-8030-1C113BABC554"));
Это, наряду с другими доказательствами, наводит меня на мысль о том, что мое сопоставление Fluent Reference является правильным (или, возможно, просто слегка ошибочным).
EDIT:
Базовые таблицы:
ParentClass: ParentClassId, ChildClassId
ChildClass: ChildClassId, ChildCode