|
Entity Framework запросы к связанным коллекциям
|
|||
---|---|---|---|
#18+
используется EF и подход Предположим есть сущность Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
собственно коллекция сообщений загружается только при обращении. (что правильно) но если я хочу сделать например запрос user.Messages.Where(e => e.Rating < 100); то он сначала загрузит всю коллекцию сообщений а только потом выполнить запрос. как можно этого избежать? и можно ли вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2013, 11:11 |
|
Entity Framework запросы к связанным коллекциям
|
|||
---|---|---|---|
#18+
FsShomanно если я хочу сделать например запрос user.Messages.Where(e => e.Rating < 100); то он сначала загрузит всю коллекцию сообщений а только потом выполнить запрос. Это не так. Будет сформирован один запрос. Можешь убедиться в этом посмотрев запрос в IntelliTrace панели или через LINQPad. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2013, 11:53 |
|
Entity Framework запросы к связанным коллекциям
|
|||
---|---|---|---|
#18+
bazileFsShomanно если я хочу сделать например запрос user.Messages.Where(e => e.Rating < 100); то он сначала загрузит всю коллекцию сообщений а только потом выполнить запрос. Это не так. Будет сформирован один запрос. Можешь убедиться в этом посмотрев запрос в IntelliTrace панели или через LINQPad. в том то и дело что так... а запрос в IntelliTrace формируется вида select ... from dbo.Messages where UserId == param1.. тоесть он делает выборку всех строк для этого пользователя. ну и + видно по скорости исполнения запроса. с ростом кол-ва элементов доходит почти до секунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2013, 12:02 |
|
Entity Framework запросы к связанным коллекциям
|
|||
---|---|---|---|
#18+
FsShoman, тогда тут что-то другое. Непонятно с какой стати тут выполняется выборка по UserId если в LINQ выражении участвует только рейтинг. Я проверял на БД AdventureWorks. Для кода Код: c# 1.
генерируется запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
То есть все выбирается одним запросом. Рассказывай конкретнее: 1) Какая версия VS? 2) Что используешь LINQ to SQL или EF? Какой версии? 3) Какая структура таблиц User и Messages? Какие первичные и внешние ключи? 4) Правильно ли отражены ключи в модели? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2013, 12:31 |
|
Entity Framework запросы к связанным коллекциям
|
|||
---|---|---|---|
#18+
bazile, ты немного путаешь: Код: c# 1.
у тебя в примере Customers это DbSet, он реализует интерфейс IQueriable у меня же это ICollection в сущности User Код: c# 1.
куда Entity подгружает все элементы при первом запросе к коллекции.(lazyloading) если же убрать virtual то элементы загрузятся в том же запросе в котором получается сущность user ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2013, 12:51 |
|
Entity Framework запросы к связанным коллекциям
|
|||
---|---|---|---|
#18+
По исходному примеру профайлер показал 1 запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2013, 19:48 |
|
|
start [/forum/topic.php?fid=17&fpage=23&tid=1349899]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 157ms |
0 / 0 |