一个非常简单的场景。 我有2类:项目和数据结构。类项目包含成员列表< DataStructure>。 我的目标是在一次调用中加载一个Project及其所有的DataStructures。NHibernate - 简单连接查询
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 { } }
}
注意数据结构还包含类数据字段的列表,但我现在不想加载这些权利。
映射在功能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]
我需要指定现场加入?这不是从映射推断出来的吗?
注1 - 表项目包含单个项目行,所以没有必要搜索特定的一个。
注2 - 我通过成功加载项目证实我的NHibernate设置是正确的。
很好的回答,但我想你的意思`Project.DataStructures`,这要是我有代表我会纠正你。 – ChrisAnnODell 2011-01-13 23:23:29