我在数据库中有以下配置。
我希望能够查询他们是员工或供应商的所有个人。在我看到的例子中,我无法使其中任何一个工作。代码不会抛出错误,它不会带回任何记录。
以下是DTO的
string sql = "from Individual i" +
" inner join fetch i.Companies";
return _session.CreateQuery(sql).List<Individual>();
我有另一个使用这3个表的功能,所有我的个人和公司集合都填充得很好,所以我知道映射正在运行。我只是不知道如何在儿童记录中添加标准。
select i.*
from individual i inner join individual_company_assoc ica
on i.individual_sid = ica.individual_sid
inner join company c
on ica.company_sid = c.company_sid
where c.is_vendor = 0
以下是我希望制作的查询。
public IList<Individual> Get(bool vendorsOnly)
{
try
{
return _session.CreateCriteria<Individual>()
.CreateAlias("Company", "c")
.Add(Restrictions.Eq("c.IsVendor", vendorsOnly))
.List<Individual>();
}
catch (NHibernate.HibernateException)
{
throw;
}
}
以下是我尝试的内容:
{{1}}
我没有使用FluentNHibernate。任何帮助将不胜感激。
答案 0 :(得分:0)
即使您在查询中引用了连接表的列,nHibernate查询也不会自动与其他表连接。
您必须明确声明查询应与公司表一起加入。
这是一个可行的例子。它使用QueryOver
语法,这是Criteria API的类型安全包装。
return _session
.QueryOver<Individual>()
.JoinQueryOver<Company>(i => i.Companies>())
.Where(c => c.IsVendor == vendorsOnly)
.TransformUsing(NHibernate.Transform.Transformers.DistinctRootEntity)
.List();