LINQ to SQL CompiledQuery.Compile () com Update, DELETE, INSERT?

votos
6

Todos,

Então eu tenho todas as minhas consultas seleção em LINQ to SQL convertidas para utilizar CompiledQueries para acelerar as coisas. Funciona muito bem até agora para instruções select, mas eu não tenho sido capaz de descobrir como pré-compilar de inserção, atualização ou excluir declarações.

Concedido, quando você está inserindo, deletando ou atualizando em LINQ to SQL, você tem que usar o modelo de objeto. Mas, obviamente, em algum lugar ao longo do caminho que gera uma consulta, que seria bom para pré-compilar e armazenar em um membro estático.

Isso é possível? Qual é o desempenho LINQ como atualizações, exclusões e inserções quando não pré-compilados? Eu podia vê-lo sendo muito mais rápido do que os seleciona, porque o que eles fazem por baixo é muito mais simples e menos dinâmico ...

Publicado 09/12/2008 em 22:08
fonte usuário
Em outras línguas...                            


3 respostas

votos
8

Há uma grande diferença. LINQ to SQL consultas seleção pode ser grandes árvores expressões complexas. Sua estes que podem levar algum tempo 'compilar'. Neste caso coalescentes para alguns T-SQL que pode ser executada contra um SQL Server. Portanto, faz sentido para armazenar em cache o resultado de uma operação para que ele possa ser reutilizado.

No entanto outra excluir, atualizar e inserir são operações simples que não necessitam de uma árvore de expressão a ser convertido em T-SQL (em si LINQ é tudo sobre como consultar). Sua apenas lamentável que fomos treinados para pensar em código SQL que executa essas outras operações como 'consultas', não estamos Actuall pedindo qualquer informação.

Estas operações são definidas somente pela DataContext não por LINQ daí o código para executar estas funções já é compilado.

Respondeu 09/12/2008 em 22:46
fonte usuário

votos
3

Eu acho que um dos três única inserção faria sentido ser capaz de compilar e re-uso, pois de exclusão é trivialmente simples (DELETE FROM tabela onde Key ...) e UPDATE só actualiza os campos que mudaram e por isso varia por operação de atualização.

[) Amien

Respondeu 10/12/2008 em 07:03
fonte usuário

votos
0

L2S usa "sp_executesql" para depois executá-lo pela primeira vez, será no cache de plano de execução do procedimento armazenado. corridas subsequentes (da mesma consulta - não mesmos parâmetros) irá reutilizar o plano compilado a partir do cache. Então, o que você está pedindo é automagicamente tratado pelo SQL Server 'nos bastidores'.

Respondeu 10/12/2008 em 12:43
fonte usuário

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