Agora que o .NET v3.5 SP1 foi lançado (junto com o VS2008 SP1), agora temos acesso à estrutura de entidades .NET.
Minha pergunta é essa. Ao tentar decidir entre usar o Entity Framework e o LINQ to SQL como um ORM, qual é a diferença?
Pelo que entendi, o Entity Framework (quando usado com o LINQ to Entities) é um 'big brother' do LINQ to SQL? Se for esse o caso - que vantagens ele tem? O que é que o LINQ to SQL não pode fazer sozinho?
.net
entity-framework
linq-to-sql
Chris Roberts
fonte
fonte
Respostas:
O LINQ to SQL suporta apenas o mapeamento 1 a 1 de tabelas, visualizações, sprocs e funções de banco de dados disponíveis no Microsoft SQL Server. É uma ótima API para a construção rápida de acesso a dados em bancos de dados SQL Server relativamente bem projetados. O LINQ2SQL foi lançado pela primeira vez com C # 3.0 e .Net Framework 3.5.
O LINQ to Entities (ADO.Net Entity Framework) é uma API ORM (Object Relational Mapper) que permite uma ampla definição de modelos de domínio de objeto e seus relacionamentos com muitos provedores de dados ADO.Net diferentes. Como tal, você pode misturar e combinar vários fornecedores de bancos de dados, servidores de aplicativos ou protocolos diferentes para projetar um mash-up agregado de objetos que são construídos a partir de uma variedade de tabelas, fontes, serviços etc. O ADO.Net Framework foi lançado com o .Net Framework 3.5 SP1.
Este é um bom artigo introdutório no MSDN: Introdução ao LINQ to Relational Data
fonte
Eu acho que a resposta rápida e suja é que
fonte
O LINQ to SQL está realmente morto? por Jonathan Allen para InfoQ.com
fonte
Há várias diferenças óbvias descritas nesse artigo @lars postadas, mas a resposta curta é:
A premissa original era que o L2S é para o Rapid Development e a EF para mais aplicativos de nível n "corporativos", mas isso está vendendo o L2S um pouco curto.
fonte
LINQ para SQL
Estrutura de entidade
Veja também:
fonte
dbSet<Orders>.Where()...ToList()
? Eu acho que é enganoso ter o Entity Framework contrário ao LINQ e ao SQL.Minha experiência com o Entity Framework tem sido menos do que estelar. Primeiro, você deve herdar das classes base EF, então diga adeus aos POCOs. Seu design terá que ser em torno da EF. Com o LinqtoSQL, eu poderia usar meus objetos de negócios existentes. Além disso, não há carregamento lento, você deve implementar isso sozinho. Existem algumas soluções para usar POCOs e carregamento lento, mas elas existem no IMHO porque a EF ainda não está pronta. Eu pretendo voltar a ele depois da 4.0
fonte
Encontrei uma resposta muito boa aqui, que explica quando usar o que em palavras simples:
fonte
Minha impressão é que o seu banco de dados é bastante interessante ou muito mal projetado se o Linq2Sql não atender às suas necessidades. Eu tenho cerca de 10 sites maiores e menores, todos usando o Linq2Sql. Procurei e o Entity framework muitas vezes, mas não consigo encontrar um bom motivo para usá-lo no Linq2Sql. Dito isso, tento usar meus bancos de dados como modelo, para que eu já tenha um mapeamento 1 para 1 entre modelo e banco de dados.
No meu trabalho atual, temos um banco de dados com mais de 200 tabelas. Um banco de dados antigo com muitas soluções ruins, para que eu pudesse ver o benefício do Entity Framework sobre o Linq2Sql, mas ainda assim preferiria redesenhar o banco de dados, pois o banco de dados é o mecanismo do aplicativo e, se o banco de dados for mal projetado e lento, meu aplicativo também será lento. O uso da estrutura Entity em um banco de dados parece uma solução rápida para disfarçar o modelo ruim, mas nunca poderia disfarçar o desempenho ruim que você obtém desse banco de dados.
fonte
Você pode encontrar uma boa comparação aqui:
http://www.dotnet-tricks.com/Tutorial/entityframework/1M5W300314-Difference-between-LINQ-to-SQL-and-Entity-Framework.html
http://www.c-sharpcorner.com/blogs/entity-framework-vs-linq-to-sql1
fonte
sqlmetal.exe
docs.microsoft.com/en-us/dotnet/framework/tools/... para gerar o código / mapeamento do banco de dados ao usarLinq to SQL
As respostas aqui abordaram muitas das diferenças entre o Linq2Sql e o EF, mas há um ponto-chave que não recebeu muita atenção: o Linq2Sql suporta apenas o SQL Server, enquanto o EF possui provedores para os seguintes RDBMSs:
Fornecido pela Microsoft:
Via fornecedores terceirizados:
para nomear alguns.
Isso torna a EF uma poderosa abstração de programação em seu armazenamento de dados relacional, o que significa que os desenvolvedores têm um modelo de programação consistente para trabalhar, independentemente do armazenamento de dados subjacente. Isso pode ser muito útil em situações em que você está desenvolvendo um produto que deseja garantir que interoperará com uma ampla variedade de RDBMSs comuns.
Outra situação em que essa abstração é útil é onde você faz parte de uma equipe de desenvolvimento que trabalha com um número de clientes diferentes ou unidades de negócios diferentes dentro de uma organização e deseja melhorar a produtividade do desenvolvedor reduzindo o número de RDBMSs que eles devem se tornar familiarizado para oferecer suporte a uma variedade de aplicativos diferentes, além de diferentes RDBMSs.
fonte
Descobri que não podia usar vários bancos de dados dentro do mesmo modelo de banco de dados ao usar o EF. Mas no linq2sql eu poderia apenas prefixando os nomes dos esquemas com os nomes dos bancos de dados.
Essa foi uma das razões pelas quais eu originalmente comecei a trabalhar com o linq2sql. Não sei se a EF ainda permitiu essa funcionalidade, mas lembro-me de ler que se destinava a não permitir isso.
fonte
Se seu banco de dados for direto e simples, o LINQ to SQL o fará. Se você precisar de entidades lógicas / abstratas em cima de suas tabelas, vá para o Entity Framework.
fonte
Ainda não suporta os tipos de dados exclusivos do SQL 2008. A diferença da minha perspectiva é que a Entity ainda tem a chance de construir um modelo em torno do meu tipo de dados geográficos em alguma versão futura, e o Linq to SQL, sendo abandonado, nunca será.
Pergunto o que há com o nHibernate ou OpenAccess ...
fonte
Eu acho que se você precisa desenvolver algo rápido, sem coisas estranhas no meio, e precisa da facilidade de ter entidades representando suas tabelas:
O Linq2Sql pode ser um bom aliado, usá-lo com o LinQ desencadeia um ótimo momento de desenvolvimento.
fonte
Estou trabalhando para um cliente que possui um grande projeto que está usando o Linq-to-SQL. Quando o projeto foi iniciado, era a escolha óbvia, porque o Entity Framework estava ausente de alguns dos principais recursos da época e o desempenho do Linq-to-SQL era muito melhor.
Agora, a EF evoluiu e o Linq-to-SQL não possui suporte assíncrono, o que é ótimo para serviços altamente escalonáveis. Às vezes, temos mais de 100 solicitações por segundo e, apesar de otimizarmos nossos bancos de dados, a maioria das consultas ainda leva vários milissegundos para ser concluída. Devido às chamadas síncronas do banco de dados, o encadeamento está bloqueado e não está disponível para outras solicitações.
Estamos pensando em mudar para o Entity Framework, exclusivamente para esse recurso. É uma pena que a Microsoft não tenha implementado o suporte assíncrono no Linq-to-SQL (ou de código aberto, para que a comunidade possa fazê-lo).
Adendo dezembro de 2018: A Microsoft está migrando para o .NET Core e o Linq-2-SQL não é compatível com o .NET Core; portanto, você precisa migrar para o EF para garantir a migração para o EF.Core no futuro.
Também há outras opções a serem consideradas, como o LLBLGen . É uma solução ORM madura que já existe há muito tempo e foi comprovada como mais à prova do futuro do que as soluções de dados da MS (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).
fonte
É o provedor que suporta apenas o SQL Server. É uma tecnologia de mapeamento para mapear tabelas de banco de dados do SQL Server para objetos .NET. É a primeira tentativa da Microsoft em um ORM - Mapeador Relacional a Objetos.
É a mesma ideia, mas usando o Entity Framework em segundo plano, como o ORM - novamente da Microsoft, ele oferece suporte a várias vantagens do banco de dados.
fonte