Очень простой сценарий.
У меня есть 2 класса: Проект и DataStructure . Класс Проект содержит список членов <<strong> DataStructure >.
Моя цель - загрузить проект и все его структуры данных за один вызов.
public class Project
{
public virtual string Id { get { } set { } }
public virtual string Name { get { } set { } }
public virtual ISet<DataStructure> DataStructures { get { } set { } }
}
public class DataStructure
{
public virtual string Id { get { } set { } }
public virtual string Name { get { } set { } }
public virtual string Description { get { } set { } }
public virtual Project Project { get { } set { } }
public virtual IList<DataField> Fields { get { } set { } }
}
Обратите внимание, что DataStructure также содержит список класса DataField , но я не хочу загружать их сейчас. 1028 *
Отображение в беглом NHibernate:
public class ProjectMap : ClassMap<Project>
{
public ProjectMap()
{
Table("PROJECTS");
Id(x => x.Pk, "PK");
Map(x => x.Id, "ID");
Map(x => x.Name, "NAME");
HasMany<DataStructure>(x => x.DataStructures).KeyColumn("FK_PROJECT");
}
}
public class DataStructureMap : ClassMap<DataStructure>
{
public DataStructureMap()
{
Table("DATA_STRUCTURES");
Map(x => x.Id, "ID");
Map(x => x.Name, "NAME");
Map(x => x.Description, "DESCRIPTION");
References<Project>(x => x.Project, "FK_PROJECT");
HasMany<DataField>(x => x.Fields).KeyColumn("FK_DATA_STRUCTURE");
}
}
Это мой запрос:
using (ISession session = SessionFactory.OpenSession())
{
IQuery query = session.CreateQuery("from Project left join DataStructure");
project = query.List<Project>();
}
Результатом является это исключение:
NHibernate.Hql.Ast.ANTLR.SemanticException: Path expected for join! [from Themis.DataEntities.Project left join DataStructure]
Нужно ли указывать поле для объединения? Разве это не выводится из отображений?
Note1 - Таблица PROJECTS содержит одну строку Project , поэтому нет необходимости искать конкретную строку.
Примечание 2 - Я проверил правильность настроек NHibernate, успешно загрузив только Project .