我有两个类: 项目 和 DataStructure 。类 项目 包含成员列表< DataStructure >。 我的目标是在一次调用中加载项目及其所有DataStructures。
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 的列表,但我不想加载这些现在。
Fluent 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 pr left join pr.DataStructure");
project = query.List<Project>();
}
query.List()返回此异常:
NHibernate.Exceptions.GenericADOException: Could not execute query[SQL: SQL not available] ---> System.ArgumentException: The value "System.Object[]" is not of type "Project" and cannot be used in this generic collection.
答案 0 :(得分:2)
您正在使用的HQL查询同时选择Project和DataStructure(就像常规SQL左连接查询一样)。如果您想要query.List<Project>()
,则必须从该查询中投影项目:select pr from Project pr left join pr.DataStructure
答案 1 :(得分:1)
"select pr from Project pr left join pr.DataStructure"