LINQ TO ENTITIES Объединение нескольких коллекций - PullRequest
2 голосов
/ 23 июня 2011

Я нахожусь в процессе преобразования некоторых устаревших хранимых процедур SQL Server в EF4 с использованием LINQ to Entites. В одном сценарии у меня есть хранимая процедура, которая выбирает из 3 различных функций Table_Valued как

 Select * from Function1 F1 ,Function2 F2, Function3 F3
 where F1.ID = F2.ID and
       F2.ID = F3.ID  (i am showing it simple)

где Function1 F1, Function2 F2 и Function3 F3 - 3 функции Sqlserver Table_Valued который возвращает табличные переменные.

Было бы замечательно, если бы кто-то мог посоветовать, что является лучшим методом для этого сценария, В настоящее время я делаю 3 различных метода C # (которые имитируют ту же функциональность, что и функция сервера SQL), которая возвращает коллекцию, а затем объединяет все эти 3 коллекции вместе, чтобы получить окончательный набор результатов.

Есть ли у нас альтернативное решение для этого, как я думаю, используя вышеуказанное решение, код вызывает 3 вызова базы данных вместо того, чтобы вызывать все вместе?

Я бы хотел, чтобы код вызывал один большой SQL вместо нескольких вызовов.

Заранее спасибо!

1 Ответ

1 голос
/ 23 июня 2011

Основная проблема в том, что EF не поддерживает табличные функции.У вашего решения есть еще одна ужасная проблема.Использование трех функций .NET, имитирующих ваши функции, на самом деле вызывает базу данных три раза (= наиболее вероятно три последовательных обращения к базе данных), но также вытягивает полный набор результатов для каждой функции в ваше приложение и выполняет соединения в памяти вашего сервера приложений.В большинстве случаев это неприемлемо.

Правильное решение зависит от внутренней реализации ваших функций, поскольку, возможно, они могут быть преобразованы либо в linq-to-entity, либо в ESQL.Если нет, то вы все равно можете использовать хранимую процедуру!Это секрет EF, что он не заменяет хранимые процедуры.Они по-прежнему являются частью вашего арсенала при его использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...