У меня возникают проблемы при написании HQL-запроса, в котором используется предложение where.
Упрощенные классы выглядят так:
class Parent
{
public virtual Int64 Id { get; private set; }
public virtual string Name { get; private set; }
}
class Child
{
public virtual Int64 Id { get; private set; }
public virtual string Name { get; private set; }
public virtual Parent Parent { get; private set; }
}
С отображением, определенным так:
class ParentMap : ClassMap<Parent>
{
Id(x => x.Id);
Map(x => x.Name);
}
class ChildMap : ClassMap<Child>
{
Id(x => x.Id);
Map(x => x.Name);
References(x => x.Parent);
}
Я хотел получить Child
экземпляров, которые принадлежат определенным Parent
элементам, поэтому я написал следующий код:
// get children for several parents (a flattened list)
IEnumerable<Parent> parents = GetParents();
// use hql
IQuery q = Session.CreateQuery("from Child as c where c.Parent in (:parents)");
q.SetParameter("parents", parents);
, но проблема в том, что я получаю следующее исключениев q.SetParameter
:
Test method Can_get_children_for_many_parents threw exception:
NHibernate.PropertyAccessException:
Exception occurred getter of Some.Namespace.Parent.Id
---> System.Reflection.TargetException: Object does not match target type.
[Изменить]
Я пытался использовать q.SetParameter("parents", parents.Select(p => p.Id);
, но получаю то же исключение.