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)

Foi útil?

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.

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