2012-01-28 3 views
2

При работе с Linq to SQL вы можете использовать DataLoadOptions, чтобы указать, какие «дочерние» объекты загружаются. Есть ли подобная техника с BLToolkit?BLToolkit эквивалент LoadWith от L2S

Приятно, что с BLT я могу создать BO непосредственно, как:

from p in db.Parent 
select new Parent 
{ 
    ParentId = p.ParentId, 
    Child = p.Child 
}; 

однако идти по этому пути, в то время как весь объект Ребенок будет создан, я должен был бы указать каждое поле в Родитель (т.е. ParentId , ParentName, ParentDob ​​и т. Д.)

Спасибо.

ответ

2

Не совсем как LoadWith, но, на мой взгляд, подход ниже еще лучше/чище (менее магический). В вашем BO сделать статическую функцию, которая будет выглядеть следующим образом:

public static Parent Build(Parent parent, Child child) 
{ 
    parent.Child = child; 
    return parent; 
} 

Теперь вы должны написать запрос LINQ, как это:

var query = from p in db.Parent 
      select Parent.Build(p, p.Child); 

Таким образом, вместо «выбрать р» или «выберите new Parent() «мы позволяем статической функции возвращать« p », но также перед тем, как возвращать объект дочернего объекта,« parent.Child ». Пока ваши ассоциации настроены правильно (BLToolkit.Mapping.Association), p.Child сообщит BLT о присоединении к таблице Child. Вы можете пойти еще дальше, то есть p.Child.Friends.etc.