Pergunta

Como seria fácil escrever um provedor LINQ mudo que pode apenas usar minhas definições de classe (que não têm quaisquer referências a objetos como propriedades) e me dar o SQL traduzido. Ele pode assumir o nome das propriedades e as colunas a ser o mesmo, bem como os nomes das classes e as tabelas subjacentes. Você pode por favor me dar algumas indicações.?

Foi útil?

Solução

Ele me levou cerca de 4 meses de trabalho em tempo integral (8 horas por dia) para construir um estábulo, prestador de trabalho que implementa toda a especificação do LINQ. Eu diria que eu tinha uma forma muito simples, buggy e versão instável após cerca de três semanas, por isso, se você está apenas procurando algo áspero Eu diria que provavelmente você está olhando para qualquer coisa de uma semana até dois meses, dependendo de quão bom você e que tipos diferentes de requiements você tem.

I deve apontar-lhe o blog Wayward para isso, Matt escreveu realmente um bom passo a passo sobre como implementar um provedor LINQ, e mesmo que você provavelmente não vai ser capaz de copiar e colar, ele vai ajudar você para se familiarizar com a forma de pensar quando se trabalha. Você pode encontrar Matt's passo a passo aqui: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx . Eu recomendo que você vá sobre isso da mesma maneira Matt faz, e estender o visitante árvore de expressão Matt inclui na segunda parte do seu tutorial.

Além disso, quando comecei a trabalhar com isso, eu tinha tanta ajuda do visualizador árvore de expressão, que realmente fez a análise de um lote inteiro mais fácil uma vez que você pode ver como linq analisado para consultas.

Construção de um provedor é realmente muito divertido, mesmo se um frustrante pouco às vezes. Desejo-lhe toda a sorte do mundo!

Outras dicas

Dê uma olhada ao href="http://www.codeplex.com/LinqExtender" rel="nofollow noreferrer"> LINQExtender projeto , é um conjunto de ferramentas para a criação de provedores LINQ personalizado.

Outra opção para dar-lhe uma perna para cima parece ser re-linq que é um framework para a criação de provedores LINQ personalizado.

Aqui está o código fonte e boa visão geral (pdf) do que está envolvido em escrever um.

Eu escrevi uma série de tutoriais sobre minha base blog sobre minha experiência no desenvolvimento de um provedor LINQ to SQL a partir do zero, começando com a fase de composição árvore de expressão (chamando os métodos LINQ), continuando com o visitante expressão, quebrar da consulta em componentes, analisar a cláusula onde, gerando o texto e parâmetros e, finalmente, compilando a coisa toda em IL usando o namespace expressão NET.

Eu vi muitas mensagens incompletas que prometidas para explicar como escrever um provedor, caindo muito aquém da marca, apenas arranhando a superfície e na verdade não entregar qualquer coisa remotamente executável.

As séries de blog que eu escrevi com base na minha experiência tem um projeto de exemplo disponível para download com o provedor simples que cobre apenas a funcionalidade exigida pelo exemplo tutorial. No entanto, também inclui a versão de produção apoiar uma série de operações (onde, juntar-se, em primeiro lugar, contar, top, etc.), subqueries, declarações aninhadas, e etc. Além disso, ele produz um SQL mais limpo do que muito do que eu' ve visto de entidades e LINQ to SQL. Não há nidificação desnecessário / redundante, tudo o embrulho entre parênteses e etc.

Para qualquer um com um bom nível de pensamento abstrato, o desenvolvimento de tal provedor de um não é uma tarefa difícil conjunto tão muitos para fora para ser. Eu desenvolvi um que é usado no ambiente de produção em cerca de 3 meses de trabalho a tempo parcial (ou seja, algumas noites e fins de semana). De o ir buscar objetivou com o desempenho e SQL arrumado em mente - uma meta-lo alcançado.

Foi um pouco difícil encontrar o tempo para publicar este material, mas eu pensei - se ele pode ajudar alguém lá fora, não há nenhuma razão para esta experiência para ir para o lixo:

Eu criei um projeto ' LinqToAnything ', que é projetado para torná-lo muito, muito fácil de implementar uma (simples) Linq provedor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top