Entity Framework Выполнение SQL-запросов - PullRequest
4 голосов
/ 14 января 2010

При использовании Entity Framework, когда выполняется запрос, скажем, 2000 записей, требующих групповой и некоторых других вычислений, выполняется ли запрос на сервере и отправляются ли только результаты клиенту или все а клиент тогда исполняется?

Это с использованием SQL Server.

Я изучаю это, так как собираюсь начать проект, в котором будет требоваться большое количество запросов к огромной базе данных, и я хочу знать, не вызовет ли это значительную нагрузку на сеть, если использовать Entity Framework.

Ответы [ 4 ]

3 голосов
/ 14 января 2010

Я думаю, что все запросы к базе данных выполняются на стороне сервера (где база данных!) И результаты передаются. Однако в Linq у вас есть то, что известно как отложенное выполнение (загружается с отложенной загрузкой), поэтому ваша информация фактически не извлекается, пока вы не попытаетесь получить к ней доступ, например, вызов ToList () или доступ к свойству (связанной таблице).

У вас есть возможность использовать LoadWith для быстрой загрузки, если вам это требуется.

Так что с точки зрения производительности, если вы действительно хотите совершить 1 поездку в базу данных по вашему запросу (с соответствующими таблицами), я бы посоветовал использовать опции LoadWith. Тем не менее, это действительно зависит от конкретной ситуации.

3 голосов
/ 14 января 2010

Sql groupby и linq groupby возвращают результаты различной формы.

Sql's groupby возвращает ключи и агрегаты (без членов группы)

Групповое задание Линка возвращает ключи и членов группы.

Если вы используете этих членов группы, они должны быть (повторно) выбраны ключом группировки. Это может привести к +1 туда-обратно базы данных на группу .

3 голосов
/ 14 января 2010

Это всегда выполняется на SQL Server. Это также означает, что иногда вы должны изменить это:

from q in ctx.Bar
where q.Id == new Guid(someString)
select q

до

Guid g = new Guid(someString);
from q in ctx.Bar
where q.Id == g
select q

Это потому, что вызов конструктора не может быть переведен в SQL.

2 голосов
/ 14 января 2010

хорошо, у меня был тот же вопрос некоторое время назад. в основном: ваш linq-оператор преобразуется в sql-оператор. однако: некоторые группы будут переведены, другие нет - в зависимости от того, как вы пишете свое заявление. так что да - и то и другое возможно

пример:

var a = (from entity in myTable where entity.Property == 1 select entity).ToList();

против

var a = (from entity in myTable.ToList() where entity.Property == 1 select entity).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...