EF - хитрая упреждающая загрузка
От: Nikolay_P_I  
Дата: 02.11.10 14:17
Оценка:
Есть таблицы А,Б,В. А один ко многим к Б и опять же А один ко многим к В.

Задача — быстро загрузить данные из А,Б,В, отключиться на автономную работу и больше не лезть в базу данных. Причем надо все записи из А, те из Б, где Б.поле1=1, и те из В, где В.поле2=А.

Как получить быстро получить 3 отфильтрованных List<> я, вроде, понимаю. А вот так как сделать ?

В итоге хочется что-б в объекте А, в А.List<Б> — были не все объекты, представляющие данные из таблицы Б, а только те, у кого Б.поле1=1. Ну и с таблицей В аналогично.
ef упреждающая загрузка
Re: EF - хитрая упреждающая загрузка
От: Аноним  
Дата: 03.11.10 08:02
Оценка:
N_P>В итоге хочется что-б в объекте А, в А.List<Б> — были не все объекты, представляющие данные из таблицы Б, а только те, у кого Б.поле1=1. Ну и с таблицей В аналогично.

Используй ObjectContext как хранилище данных (Repository),
При загрузке данных используй Include. Кажется он подымает не все записи справочника, а только нужные
Re[2]: EF - хитрая упреждающая загрузка
От: Nikolay_P_I  
Дата: 03.11.10 08:46
Оценка:
Здравствуйте, Аноним, Вы писали:


N_P>>В итоге хочется что-б в объекте А, в А.List<Б> — были не все объекты, представляющие данные из таблицы Б, а только те, у кого Б.поле1=1. Ну и с таблицей В аналогично.


А>Используй ObjectContext как хранилище данных (Repository),

А>При загрузке данных используй Include. Кажется он подымает не все записи справочника, а только нужные

Я смотрел такой способ, но как я понял — это требует foreach на каждый объект А при загрузке которого и указывается Include на Б и В. Foreach на все А не самый быстрый способ.

Вроде как быстро будет 3 списка Entity.A(Б)(В).ToList(), я даже фильтр на Б и В наложу. Но как я понимаю — в обектах А будут ссыдки на не прошедшие фильтрацию объекты Б и В.
Re: EF - хитрая упреждающая загрузка
От: QrystaL Украина  
Дата: 03.11.10 08:54
Оценка:
N_P>В итоге хочется что-б в объекте А, в А.List<Б> — были не все объекты, представляющие данные из таблицы Б, а только те, у кого Б.поле1=1. Ну и с таблицей В аналогично.

Вам нужно составить LINQ запрос с использованием join
Примеры можно посмотреть здесь.
Re: EF - хитрая упреждающая загрузка
От: HowardLovekraft  
Дата: 03.11.10 11:01
Оценка:
Здравствуйте, Nikolay_P_I, Вы писали:

Если я вас правильно понял, вам требуется отфильтровать связанную коллекцию по какому-либо критерию.
См. здесь: How to do a Conditional Include.
Re[2]: EF - хитрая упреждающая загрузка
От: HowardLovekraft  
Дата: 03.11.10 11:02
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Вам нужно составить LINQ запрос с использованием join

Что с чем джойнить?
Re[2]: EF - хитрая упреждающая загрузка
От: Nikolay_P_I  
Дата: 03.11.10 13:51
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Если я вас правильно понял, вам требуется отфильтровать связанную коллекцию по какому-либо критерию.

HL>См. здесь: How to do a Conditional Include.

Да, спасибо огромное. Тем более, что там обсуждается и случай много-к-многим, а у меня такое тоже есть.

Появилось 2 вопроса:

1) Уже не раз натыкаюсь поиском на этот блог — есть ли где эти "tips" в одном месте собранные ?

2) Если я сделаю

Entity.A.ToLIst()
Entity.B.Where("field1 = 1").ToList()


Что, с учетом автоматического fix-up у меня будет в A.List<B> коллекции ? Меня, в принципе, устроит, если объект в коллекции будет, но не будет загружен из базы данных так как не прошел фильтрацию и я об этом смогу легко узнать.
Re[3]: EF - хитрая упреждающая загрузка
От: HowardLovekraft  
Дата: 03.11.10 14:17
Оценка:
Здравствуйте, Nikolay_P_I, Вы писали:

N_P>1) Уже не раз натыкаюсь поиском на этот блог — есть ли где эти "tips" в одном месте собранные ?


См. профильный форум:
Announcements -> Where to find EF Tips and Tricks -> Entity Framework Tips and Tricks.

N_P>2) Если я сделаю


N_P>skipped


Объясните подробней. Что за "Entity"?
Re[4]: EF - хитрая упреждающая загрузка
От: Nikolay_P_I  
Дата: 03.11.10 14:56
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Объясните подробней. Что за "Entity"?


Генератор студийный дает типизированному ObjectContextу такое название по-умолчанию
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.