У меня есть родительская сущность со списком дочерних сущностей. При использовании NHibernate для получения заданного родителя с потомками из SQL, он отлично работает, если потомков нет ИЛИ если есть потомки с датами, соответствующими условию where.
Если есть потомки, которые не соответствуют предложению where, то родительский элемент равен нулю. Я хочу, чтобы родительский элемент был инициализирован пустым списком дочерних элементов.
Есть ли какие-либо мысли о том, как я могу изменить приведенный ниже код, чтобы это произошло?
Объекты:
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; }
}
Репозиторий:
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"), // no children at all
Restrictions.And(
Restrictions.Ge("ChildDate", startDate),
Restrictions.Le("ChildDate", endDate)
)
));
foundParents = Session
.CreateMultiCriteria()
.Add<Parent>(criteria1)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.List()[0] as List<Parent>;
Если бы я писал SQL для этого я бы поместил сравнение дат с левым соединением, а не в предложение where. Я не могу понять, как это сделать с помощью NHibernate.