LINQ к SQL CompiledQuery.Compile () с Update, Delete, Insert?

голоса
6

Все,

Таким образом, я получил все мои запросов на выборку в LINQ к SQL преобразованы в использовании CompiledQueries, чтобы ускорить процесс. Прекрасно работает до сих пор для некоторых заявлений, но я не мог понять, как предварительно скомпилировать вставки, обновления или удаления заявления.

Конечно, когда вы вставки, удаления или обновления в LINQ к SQL, вы должны использовать объектную модель. Но, очевидно, где-то по пути он генерирует запрос, который неплохо бы предварительно собрать и хранить в статическом элементе.

Это возможно? Что такое производительность LINQ, как для обновления, удаления и вставки, когда ее предварительно не компилируется? Я мог видеть, что это намного быстрее, чем выбирает, потому что они делают под гораздо проще и менее «динамический» ...

Задан 09/12/2008 в 22:08
источник пользователем
На других языках...                            


3 ответов

голоса
8

Существует большая разница. Linq-To-SQL SELECT запросы могут быть большие сложные выражения деревьев. Его это, что может занять некоторое время «компиляции». В этом случае сливающихся в некоторой T-SQL, который может быть запущен против SQL Server. Так что имеет смысл кэшировать результат операции, так что она может быть использована повторно.

Однако другие Delete, Update и Insert простые операции, которые не требуют выражения деревьев должны быть преобразованы в T-SQL (сам LINQ все о запросе). Его просто жаль, что мы были обучены думать SQL кода, который выполняет эти другие операции, как «запросы», мы не actuall просят за любую информацию.

Эти операции определяются только DataContext не LINQ поэтому код для выполнения этих функций уже скомпилированные.

Ответил 09/12/2008 в 22:46
источник пользователем

голоса
3

Я думаю, что из трех только вставки будет иметь смысл, чтобы иметь возможность компилировать и повторно использовать, потому что удаление тривиально просто (DELETE FROM Таблица WHERE Key ...) и UPDATE обновляет только те поля, которые были изменены, и поэтому изменяется в зависимости от операции обновления.

[) Amien

Ответил 10/12/2008 в 07:03
источник пользователем

голоса
0

L2S использует «sp_executesql» так после того, как вы запустите его в первый раз, когда он будет находиться в кэше плана выполнения хранимой процедуры. Последующие запуски (одного и того же запроса - не те же Params) будет повторно использовать скомпилированный план из кэша. Так что вы просите будет автоматически обрабатываться SQL Server «за кадром».

Ответил 10/12/2008 в 12:43
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more