I have a parent with a list of child objects. When using NHibernate to retrieve a given parent with children from SQL, it works fine if there are no children or if there are children with dates that match the where clause.
If there are children that do not match the where clause, the parent is null. I want the parent to be initialized with an empty list of children.
Any thoughts on how I can change the code below to make this happen?
Objects:
public class Parent
{
public int ParentId;
public IList<Child> Children { get; set; }
public Parent()
{
Children = new List<Child>();
}
}
public class Child
{
public int ChildId;
public DateTime ChildDate;
public Parent Parent { get; set; }
}
Repository:
IList<Parent> foundParents = new List<Parent>();
var criteria1 = DetachedCriteria.For<Parent>()
.Add(Restrictions.Eq("ParentId", parentId))
.CreateCriteria("Children", JoinType.LeftOuterJoin)
.Add(Restrictions.Or(
Restrictions.IsNull("ChildDate"),
Restrictions.And(
Restrictions.Ge("ChildDate", startDate),
Restrictions.Le("ChildDate", endDate)
)
));
foundParents = Session
.CreateMultiCriteria()
.Add<Parent>(criteria1)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.List()[0] as List<Parent>;
If I were writing SQL for this, I would put the date comparison with the left join, and not in the where clause. I cannot figure out how to do this with NHibernate.