NHibernate ou LINQ to SQL [fechado]
-
09-06-2019 - |
Pergunta
Se estiver iniciando um novo projeto, o que você usaria para seu ORM NHibernate ou LINQ e por quê.Quais são os prós e os contras de cada um.
editar:LINQ to SQL não apenas LINQ (obrigado @Jon Limjap)
Solução
Eu me fiz uma pergunta muito semelhante, exceto que em vez do NHibernate eu estava pensando no WilsonORM, que considero muito bom.
Parece-me que existem muitas diferenças importantes.
LINQ:
- não é uma ferramenta ORM completa (você pode chegar lá com algumas bibliotecas adicionais, como a estrutura Entity mais recente - eu pessoalmente considero que a arquitetura desta tecnologia mais recente da MS tem cerca de 10 anos quando comparada com outras estruturas ORM)
- está consultando principalmente a "linguagem" com suporte ao intellisense (o compilador verificará a sintaxe da sua consulta)
- é usado principalmente com o Microsoft SQL Server
- é de código fechado
Hibernar:
- é uma ferramenta ORM
- tem uma linguagem de consulta bastante limitada sem intellisense
- pode ser usado com quase qualquer DBMS para o qual você possui um provedor de banco de dados
- é código aberto
Realmente depende.Se você desenvolver um aplicativo de desktop Rich (Windows) onde você precisa construir objetos, trabalhar com eles e no final persistir suas alterações, então eu recomendaria um framework ORM como o NHibernate.
Se você desenvolver um aplicativo da Web que geralmente apenas consulta dados e apenas ocasionalmente grava alguns dados no banco de dados, eu recomendaria uma boa linguagem de consulta como o Linq.
Então, como sempre, depende.:-)
Outras dicas
Err...há LINQ para NHibernate.
Talvez o que você queira dizer é qual usar:
- LINQ para SQL
- NHibernar
Eu prefiro NHibernate.
LINQ to SQL é bastante leve, mas é um pouco mais acoplado à sua estrutura de dados, ao contrário do NHibernate, que é bastante flexível em termos de tipos de definições de objetos que podem ser mapeados para suas estruturas de tabela.
É claro que isso não quer dizer que o LINQ to SQL não tenha utilidade:este mesmo site o utiliza.Acredito que seja bastante útil começar a trabalhar em pequenas aplicações onde o esquema do banco de dados não é tão grande.
Começar com NHibernate é uma má ideia.Ele mostra um bom desempenho apenas com configurações adequadas.Tente usar EFv4 para projetos grandes e L2S (talvez produtos de terceiros) para projetos pequenos e médios.Esses produtos são mais convenientes e flexíveis que o NHibernate e permitem que você comece rapidamente.
não é uma lista completa
Linqtosql Pro:
- melhor suporte de ferramenta
- bom provedor linq
- fácil de começar quando db-schema == classes -
Vigarista:
- não flexível (ou seja, esquema db! = classes)
- suporta apenas MS SQL Server
- sem cascata (salvar, atualizar ...não cascata para objetos referenciados)
Nibernate Pro:
- muitos rdbms suportados ootb
- rico em recursos
- muito flexível para quase todos os casos de canto
- Código aberto
Vigarista:
- não é tão fácil começar
- não do MS
- existem muitas ferramentas, mas você tem que procurar
Entre os 2 ORMs
eu escolheria LinqToSql se:
- esquema db == classes
- use apenas MS SQL Server
- a loja permite apenas produtos MS
eu escolheria o Nhibernate se:
- modelo de objeto mais rico
- esquema de banco de dados legado
- Banco de dados diferente do MS SQL Server ou suporte a vários
- desempenho crítico (acho que o NH tem mais recursos para otimizar o desempenho do que o LinqToSql)
OBSERVAÇÃO:esta é a minha opinião pessoal.Eu lido principalmente com bancos de dados legados (malucos) e trabalhos ETL complexos, onde o modelo de objeto ajuda muito em relação ao SQL.
Não uso (nem conheço) NHibernate, só quero dar meu testemunho:Eu uso LINQ to SQL há cerca de 2 anos com bancos de dados MySQL e PostgreSQL (usando DBLinq no Windows, usando Mono no Linux e Mac OS X).
Portanto, o LINQ to SQL NÃO está limitado aos produtos Microsoft.
Posso confirmar que o LINQ to SQL é muito adequado para projetos de pequeno e médio porte, ou grandes projetos onde você tem o controle absoluto da estrutura do banco de dados.Como indicam as revisões, o LINQ to SQL tem algumas limitações que o tornam uma ferramenta inadequada quando não há mapeamento direto entre as tabelas do banco de dados e as classes de entidade.
Observação :LINQ to SQL não oferece suporte a relacionamentos muitos para muitos (mas isso pode ser facilmente alcançado com algumas linhas de código).
A principal desvantagem do NHibernate é a incapacidade de fazer uso de chamadas de método.Eles não podem ser traduzidos para SQL.Para contornar isso, é necessário recriar árvores de expressão, o que é difícil de fazer.