Acesso ao banco de dados SQL tradicional versus ORM (NHibernate, EF, et al).Quem ganha?
Pergunta
Consegui escrever meu próprio código de acesso SQL com uma combinação de procedimentos armazenados e consultas parametrizadas e uma pequena biblioteca wrapper que escrevi para minimizar o grunge do ADO.NET.Tudo isso funcionou muito bem para mim no passado e tenho sido muito produtivo com isso.
Estou iniciando um novo projeto. Devo deixar minhas coisas antigas para trás e me aprofundar em uma solução baseada em ORM?(Eu sei que existem grandes diferenças de conceitos elevados entre NHibernate e EF - não quero entrar nisso aqui.Para fins de argumentação, vamos até mesmo agrupar o LINQ com as alternativas da velha escola.) Estou procurando conselhos sobre a aplicação no mundo real de coisas do tipo ORM em comparação com o que eu sei (e sei muito bem).
Código ADO.NET antigo ou ORM?Tenho certeza de que existe uma curva – a curva tem um ROI que faz as coisas valerem a pena?Estou ansioso e com vontade de aprender, mas tenho um prazo.
Solução
Uma boa pergunta, mas um tema muito controverso.
Esta postagem do blog de Frans Bouma há alguns anos, a citação dos prós do SQL dinâmico (implicando ORMs) em relação aos procedimentos armazenados desencadeou uma guerra violenta.
Outras dicas
Acho que o LINQ to SQL é muito, muito mais rápido quando estou prototipando o código.Simplesmente surpreende qualquer outro método quando preciso de algo agora.
Mas há um custo.Comparado aos procs armazenados manualmente, o LINQ é lento.Especialmente se você não tomar muito cuidado, pois alterações aparentemente pequenas podem repentinamente transformar uma única consulta em consultas 1+N.
Minha recomendação.Use LINQ to SQL primeiro e depois mude para procs se não estiver obtendo o desempenho necessário.
Houve uma grande discussão sobre este tema no DevTeach em Montreal.Se você acessar este URL: http://www.dotnetrocks.com/default.aspx?showNum=240 você poderá ouvir dois especialistas na área (Ted Neward e Oren Eini) discutirem os prós e os contras de cada abordagem.Provavelmente a melhor resposta que você encontrará sobre um assunto que não tem uma resposta definitiva.