如果我有以下类结构,如果父类中有一个具有特定名称,那么选择父类的NHibernate标准是什么?
public class Child
{
public int Id { get; set; }
public int Name { get; set; }
}
public class Parent
{
public int Id { get; set; }
public IList<Child> Children { get; set; }
}
答案 0 :(得分:16)
我只是为集合创建一个别名并添加限制。
var parentsWithKidName = session.CreateCriteria<Parent>()
.CreateAlias("Children", "c", JoinType.InnerJoin)
.Add(Restrictions.Eq("c.Name", childName))
.SetResultTransformer(Transformers.DistinctRootEntity())
.List<Parent>();
这会导致
select p.*
from parent p
inner join child c on /* however it's mapped? */
where c.Name = ?
不同的根实体转换器将处理结果集并删除重复的父级。他们仍然遇到了电线。
答案 1 :(得分:0)
我所做的是为父类型创建条件查询,使用return为子类型创建条件查询,然后将特定条件添加到子类型子查询。
public virtual IList<T> GetByChildCriteria(string childName,
params ICriterion[] criterion)
{
ICriteria criteria = NHibernateSession
.CreateCriteria(persitentType)
.CreateCriteria(childName);
foreach (ICriterion criterium in criterion)
{
criteria.Add(criterium);
}
return criteria.List<T>();
}
注意:NHibernateSession变量的类型为ISession。