Como você classificaria cada um deles em termos de:
- atuação
- Velocidade de desenvolvimento
- Código puro, intuitivo e sustentável
- Flexibilidade
- No geral
Eu gosto do meu SQL e, portanto, sempre fui um fã obstinado do ADO.NET e dos procedimentos armazenados, mas recentemente brinquei com o Linq to SQL e fiquei impressionado com a rapidez com que escrevi minha camada do DataAccess e decidi gastar algum tempo realmente entendendo Linq to SQL ou EF ... ou nenhum?
Eu só quero verificar se não há uma grande falha em nenhuma dessas tecnologias que tornaria inútil o meu tempo de pesquisa. Por exemplo, o desempenho é terrível, é legal para aplicativos simples, mas só pode levá-lo tão longe.
Atualização: Você pode se concentrar em EF VS L2S VS SPs em vez de ORM VS SPs. Estou interessado principalmente por EF VS L2S. Mas também quero compará-los com os procs armazenados, pois o SQl simples é algo que eu sei muito sobre.
fonte
Respostas:
Primeiro, se você estiver iniciando um novo projeto, vá com o Entity Framework ("EF") - agora ele gera SQL muito melhor (mais como o Linq to SQL) e é mais fácil de manter e mais poderoso que o Linq to SQL (" L2S "). Desde o lançamento do .NET 4.0, considero o Linq to SQL uma tecnologia obsoleta. A MS tem sido muito aberta quanto a não continuar o desenvolvimento do L2S.
1) Desempenho
Isso é difícil de responder. Para a maioria das operações de entidade única ( CRUD ), você encontrará desempenho equivalente nas três tecnologias. Você precisa saber como o EF e o Linq to SQL funcionam para usá-los ao máximo. Para operações de alto volume, como consultas de sondagem, convém que o EF / L2S "compile" sua consulta de entidade para que a estrutura não precise regenerar constantemente o SQL, ou você pode enfrentar problemas de escalabilidade. (veja edições)
Para atualizações em massa nas quais você está atualizando grandes quantidades de dados, o SQL bruto ou um procedimento armazenado sempre terá um desempenho melhor do que uma solução ORM, porque você não precisa reunir os dados por cabo para o ORM para realizar atualizações.
2) Velocidade de desenvolvimento
Na maioria dos cenários, o EF afasta os processos armazenados / SQL nus quando se trata da velocidade do desenvolvimento. O designer da EF pode atualizar seu modelo do banco de dados à medida que ele muda (mediante solicitação), para que você não tenha problemas de sincronização entre o código do objeto e o código do banco de dados. A única vez em que eu não consideraria o uso de um ORM é quando você está executando um aplicativo do tipo relatório / painel em que não está fazendo nenhuma atualização ou quando está criando um aplicativo apenas para realizar operações de manutenção de dados brutos em um banco de dados.
3) Código puro / de manutenção
De mãos dadas, a EF supera SQL / sprocs. Como seus relacionamentos são modelados, as junções no seu código são relativamente raras. Os relacionamentos das entidades são quase evidentes para o leitor na maioria das consultas. Nada é pior do que ter que passar de depuração de camada para camada ou através de múltiplos SQL / camadas intermediárias para entender o que realmente está acontecendo com seus dados. A EF traz seu modelo de dados para o seu código de uma maneira muito poderosa.
4) Flexibilidade
Os procs armazenados e o SQL bruto são mais "flexíveis". Você pode aproveitar sprocs e SQL para gerar consultas mais rápidas para casos específicos ímpares, além de aproveitar a funcionalidade do banco de dados nativo mais facilmente do que com o ORM.
5) geral
Não fique preso à falsa dicotomia de escolher um ORM vs usar procedimentos armazenados. Você pode usar os dois no mesmo aplicativo e provavelmente deveria. As grandes operações em massa devem ser realizadas em procedimentos armazenados ou SQL (que podem realmente ser chamados pelo EF), e o EF deve ser usado para suas operações CRUD e para a maioria das necessidades da camada intermediária. Talvez você opte por usar o SQL para escrever seus relatórios. Eu acho que a moral da história é a mesma de sempre. Use a ferramenta certa para o trabalho. Mas o mais fino é que a EF é muito boa hoje em dia (a partir do .NET 4.0). Passe algum tempo lendo e entendendo isso em profundidade e poderá criar aplicativos incríveis de alto desempenho com facilidade.
EDIT : O EF 5 simplifica um pouco essa parte com as consultas LINQ compiladas automaticamente , mas para itens de alto volume, você definitivamente precisará testar e analisar o que melhor se adapta a você no mundo real.
fonte
Procedimentos armazenados:
(+)
(-)
ORM:
(+)
(-)
A troca geral é entre ter uma grande flexibilidade e perder muito tempo versus ficar restrito ao que você pode fazer, mas fazê-lo muito rapidamente.
Não há resposta geral para essa pergunta. É uma questão de guerras sagradas. Também depende de um projeto em mãos e de suas necessidades. Escolha o que funciona melhor para você.
fonte
As any abstraction can produce "high-level" developers having no idea how it works under the hood
sua pergunta é basicamente O / RM vs mão escrevendo SQL
Usando um ORM ou SQL simples?
Dê uma olhada em algumas das outras soluções de O / RM disponíveis, o L2S não é o único (NHibernate, ActiveRecord)
http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software
para abordar questões específicas:
fonte
O LINQ-to-SQL é uma peça notável de tecnologia que é muito simples de usar e, em geral, gera consultas muito boas para o back-end. O LINQ para EF foi programado para substituí-lo, mas historicamente tem sido extremamente desajeitado de usar e gerou SQL muito inferior. Não sei o estado atual das coisas, mas a Microsoft prometeu migrar toda a bondade do L2S para o L2EF, então talvez esteja tudo melhor agora.
Pessoalmente, tenho uma aversão apaixonada pelas ferramentas ORM (veja minha descrição aqui para obter detalhes) e, portanto, não vejo razão para favorecer o L2EF, pois o L2S me dá tudo o que espero de uma camada de acesso a dados. De fato, acho que recursos do L2S, como mapeamentos artesanais e modelagem de herança, adicionam complexidade completamente desnecessária. Mas sou só eu. ;-)
fonte
Há uma abordagem totalmente nova que você pode considerar se procura o poder e o desempenho dos procedimentos armazenados e o rápido desenvolvimento que ferramentas como o Entity Framework fornecem.
Eu levei o SQL + para um test drive em um projeto pequeno, e é realmente algo especial. Basicamente, você adiciona o que equivale a comentários às suas rotinas SQL e esses comentários fornecem instruções para um gerador de código, que cria uma biblioteca de classes orientada a objetos muito boa, com base na rotina SQL real. Tipo de estrutura de entidade semelhante ao contrário.
Os parâmetros de entrada se tornam parte de um objeto de entrada, os parâmetros de saída e os conjuntos de resultados se tornam parte de um objeto de saída, e um componente de serviço fornece as chamadas de método.
Se você deseja usar procedimentos armazenados, mas ainda deseja um desenvolvimento rápido, pode dar uma olhada nessas coisas.
fonte