По поводу загрузки ассоциированных свойств
От: MozgC США http://nightcoder.livejournal.com
Дата: 29.03.13 23:22
Оценка:
Доброе время суток,

Насколько я понимаю, сейчас нет возможности загрузить ассоциированные свойства, кроме как писать код вручную. Кроме того, нельзя загрузить ассоциированные коллекции.

Ну и само собой хочется чтобы такая возможность была. Судя по поиску по форуму эта просьба периодически возникает уже несколько лет.

Я вижу это как-то так:

var ordersWithOrderLines = db.Orders.LoadWith(o => o.OrderLines);

Как я понимаю, тут возникает 2 момента которые надо продумать:
1) До какого уровня загружать OrderLines
2) Как быть, если пользователь захочет загрузить пару ассоциированных коллекций (в случае одной коллекции проблем быть не должно).

По первому пункту, имхо самым ожидаемым поведением будет загрузка 1 уровня, т.е. ассоциации OrderLines уже не загружаем.
По второму пункту, я бы сделал настройку, которая бы контролировала разрешение загрузки нескольких ассоциированных коллекций (чтобы по незнанию пользователя не получалось ненужных долгих запросов). По умолчанию запрещено — и исключение в runtime. Если пользователь готов пойти на долгое выполнение запроса — пусть включает настройку и дергает из БД что хочет.
Re: По поводу загрузки ассоциированных свойств
От: MozgC США http://nightcoder.livejournal.com
Дата: 05.04.13 19:30
Оценка:
Если что, в Linq2Sql это сделано с помощью DataLoadOptions.
Т.е. в linq2sql код будет типа такого:

var dlo = new DataLoadOptions();
dlo.LoadWith<Order>(o => o.OrderLines);
db.LoadOptions = dlo; // db = data context

foreach(Order order in db.Orders)
{ 
    //Order lines are eagerly loaded; additional queries are not needed
    foreach(OrderLine orderLine in order.OrderLines)
    {
       //do something
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.