Estrutura da entidade vs LINQ a SQL

Agora que o. NET v3. 5 SP1 foi lançado (juntamente com o VS2008 SP1), agora temos acesso ao framework.net entity.

A minha pergunta é esta. Ao tentar decidir entre usar o Framework Entity e LINQ para SQL como um ORM, Qual é a diferença?

da maneira que eu entendo, a estrutura de entidade (quando usada com LINQ para Entidades) é um 'big brother' para LINQ para SQL? Se for esse o caso - Que vantagens tem? O que pode ele fazer que LINQ para SQL não pode fazer em seu própria?

Author: Charles, 2008-08-12

17 answers

O LINQ para o SQL só suporta o mapeamento de tabelas, vistas, sprocs e funções de base de dados disponíveis no servidor SQL da Microsoft. É uma grande API para usar para a construção de acesso rápido de dados para bases de dados de servidores SQL relativamente bem projetadas. LINQ2SQL foi lançado pela primeira vez com C # 3.0 e.NET Framework 3.5.

Ligação às entidades (ADO.Net Entity Framework) é uma API ORM (Object Relational Mapper) que permite uma definição ampla de modelos de domínio de objeto e suas relações com muitos diferente ADO.Net fornecedores de dados. Como tal, você pode misturar e combinar um número de diferentes fornecedores de banco de dados, servidores de aplicações ou protocolos para projetar um mash-up agregado de objetos que são construídos a partir de uma variedade de tabelas, fontes, serviços, etc. ADO.Net Framework foi lançado com o .net Framework 3.5 SP1.

Este é um bom artigo introdutório sobre a MSDN: Introdução do LINQ aos Dados Relacionais
 450
Author: Kris, 2008-09-21 03:22:59
Acho que a resposta rápida e suja é que ...
  • LINQ para SQL é a maneira rápida e fácil de o fazer. Isso significa que você vai mais rápido, e entregar mais rápido se você está trabalhando em algo menor.
  • O quadro da entidade é a forma completa e sem barreiras de o fazer. Isso significa que você vai levar mais tempo na frente, desenvolver mais devagar, e ter mais flexibilidade se você estiver trabalhando em algo maior.
 190
Author: Brad Tutterow, 2009-05-23 00:14:03

O LINQ está mesmo morto?Por Jonathan Allen para InfoQ.com

Matt Warren descreve [LINQ para SQL] como algo que "nunca deveria existir."Essencialmente, era apenas suposto ser stand-in para ajudá-los a desenvolver LINQ até que o real ORM estava pronto.

...

A escala da estrutura da entidade fez com que perdesse o prazo.net 3.5/Visual Studio 2008. Foi concluído a tempo para o infelizmente chamado". net 3.5 Service Pack 1", o que foi mais um lançamento importante do que um pacote de serviços.

...

Os programadores não gostam de [ADO.NET quadro de entidade] devido à complexidade.

...

A partir de. NET 4.0, LINQ para entidades será a solução de acesso de dados recomendada para LINQ para cenários relacionais.
 104
Author: Zack Peterson, 2008-11-03 15:53:25

Há uma série de diferenças óbvias delineadas no artigo @lars publicado, mas a resposta curta é:

  • o L2S é propriedade de objectos estreitamente acoplados a um campo específico de base de dados ou mais correctamente mapeamento de objectos para um esquema específico de base de dados
  • o L2S só funcionará com o servidor SQL (tanto quanto sei)
  • A EF permite mapear uma única classe para várias tabelas
  • o EF vai tratar das relações M-M
  • o EF terá capacidade para atingir qualquer ADO.NET dados fornecedor

A premissa original era L2S é para o desenvolvimento rápido, e EF para mais "empreendedorismo" n-tier aplicações, mas isso é vender L2S um pouco curto.

 86
Author: JamesSugrue, 2008-08-12 11:15:24

LINQ para SQL

  1. Fonte homogénea de dados: servidor SQL
  2. recomendado para pequenos projectos apenas quando a estrutura de dados for bem concebida
  3. o mapeamento pode ser alterado sem recompilação com SqlMetal.exe
  4. .dbml (Database Markup Language)
  5. mapeamento de um para um entre tabelas e classes
  6. Suportaa herança
  7. não suporta tipos complexos
  8. Armazenamento-primeira aproximação
  9. Base de dados-visão centrada de um base de dados
  10. Criado por C# team
  11. suportada mas não Outras melhorias pretendidas

Entity Framework

  1. Fontes de dados heterogéneas: suportam muitos fornecedores de Dados
  2. recomendado para todos os novos projectos, excepto:
    • pequenos (LINQ a SQL)
    • Quando a fonte de dados é um ficheiro plano (ADO.NET)
  3. o mapeamento pode ser alterado sem Nova compensação ao definir o processo do artefacto do modelo e dos ficheiros de mapeamento para copiar para Pasta De Saída
  4. .edmx (modelo de dados de entidade) que contém:
    • SSDL (linguagem de definição do esquema de armazenamento)
    • CSDL (Conceptual Schema Definition Language)
    • MSL (Mapping Specification Language)
  5. mapeamentos um para um, um para muitos, muitos para um entre tabelas e classes
  6. suporta heranças:
    • TPH (tabela por hierarquia)
    • TPT (tabela por tipo)
    • TPC (tabela por classe de betão)
  7. suportes tipos complexos
  8. Código-primeiro, modelo-primeiro, Armazenamento-primeira aproximação
  9. Vista centrada na aplicação de uma base de dados
  10. Criado pela equipa do servidor SQL
  11. futuro da APIs de dados da Microsoft

Ver também:

 61
Author: Ryszard Dżegan, 2015-05-13 08:36:58
A minha experiência com a estrutura de Entidades tem sido menos do que estelar. Primeiro, tens de herdar as aulas da base da EF, por isso, despede-te do POCOs. O teu design terá de estar perto da EF. Com LinqtoSQL eu poderia usar meus objetos de negócio existentes. Além disso, não há carga preguiçosa, você tem que implementar isso você mesmo. Há alguns trabalhos por aí para usar POCOs e carga preguiçosa, mas eles existem IMHO porque EF ainda não está pronto. Tenciono voltar a ela depois de 4.0 [[2]}
 50
Author: Jiyosub, 2008-12-08 03:50:54

Encontrei uma resposta muito boa Aqui que explica quando usar o quê em palavras simples:

A regra básica para a qual a estrutura a usar é como planear editar os seus dados na sua camada de apresentação.

  • Linq-To-Sql - use esta estrutura se planeia editar um de cada vez relação dos seus dados na sua camada de apresentação. Ou seja, tu. não planeie combinar dados de mais de uma tabela em qualquer Vista ou pagina.

  • Entidade Framework - use esta framework se planejar combinando dados de mais de uma tabela na sua vista ou página. Fazer mais claro, os termos acima são específicos para os dados que serão manipulado na sua vista ou página, não apenas exibido. Isto é ... é importante entender.

Com a estrutura de Entidades você é capaz de" mesclar " dados apresentados em conjunto apresentar à camada de apresentação numa forma editável, e depois quando este formulário é enviado, a EF saberá como atualizar todos os dados das várias mesas.

Existem provavelmente razões mais precisas para escolher EF EM vez de L2S, mas esta seria provavelmente a mais fácil de entender. O L2S não ter a capacidade de juntar dados para a apresentação da vista.

 46
Author: Nawaz, 2012-03-23 15:52:54
A minha impressão é que a sua base de dados é muito intensa ou muito mal desenhada se o Linq2Sql não se adequar às suas necessidades. Eu tenho cerca de 10 sites tanto maiores e menores todos usando Linq2Sql. Eu olhei e entidade framework muitas vezes, mas eu não consigo encontrar uma boa razão para usá-lo sobre Linq2Sql. Dito isso, eu tento usar minhas bases de dados como modelo para que eu já tenho um mapeamento de 1 para 1 entre Modelo e banco de dados. No meu trabalho actual temos uma base de dados com mais de 200 tabelas. Uma base de dados antiga com muitas soluções ruins para que lá eu pudesse ver o benefício do framework de entidade sobre Linq2Sql, mas ainda assim eu preferiria redesenhar o banco de dados já que o banco de dados é o motor da aplicação e se o banco de dados é mal projetado e lento, então a minha aplicação também será lenta. Usar o Entity framework em tal banco de dados parece ser um quickfix para disfarçar o mau modelo, mas ele nunca poderia disfarçar o mau desempenho que você obtém a partir de tal banco de dados.
 35
Author: terjetyl, 2008-11-21 19:52:18

As respostas aqui cobriram muitas das diferenças entre Linq2Sql e EF, mas há um ponto chave que não foi dado muita atenção: o Linq2Sql só suporta o servidor SQL, enquanto a EF tem fornecedores para o seguinte RDBMS:

Fornecido pela Microsoft:

  • ADO.NET controladores para o servidor SQL, OBDC e OLE DB

Via terceiros fornecedores:

  • MySQL
  • Oracle
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • Sybase
  • Synergex
  • Firebird
  • Npgsql

Para citar alguns.

Isto faz da EF uma poderosa abstração de programação sobre o seu armazenamento de dados relacional, o que significa que os programadores têm um modelo de programação consistente com o qual trabalhar, independentemente do armazenamento de dados subjacente. Isto pode ser muito útil em situações onde você está desenvolvendo um produto que você quer garantir irá interoperar com uma ampla gama de RDBMS comuns.

Outra situação em que a abstração é útil é onde você faz parte de uma equipe de desenvolvimento que trabalha com um número de clientes diferentes, ou diferentes unidades de negócio dentro de uma organização, e você quer melhorar a produtividade do desenvolvedor, reduzindo o número de RDBMS que eles têm de se familiarizar com o fim de oferecer suporte a uma variedade de diferentes aplicações no topo de diferentes RDBMS.

 21
Author: saille, 2014-03-17 03:19:58
Descobri que não podia usar várias bases de dados no mesmo modelo de base de dados ao usar EF. Mas no linq2sql eu poderia apenas por pré-configurar os nomes do esquema com nomes de banco de dados. Esta foi uma das razões pelas quais comecei a trabalhar com o linq2sql. Não sei se o FE ainda permitiu esta funcionalidade, mas lembro-me de ter lido que se destinava a não permitir isso.
 15
Author: Banford, 2011-02-17 15:36:00

Se a sua base de dados For simples e simples, LINQ para SQL serve. Se você precisa de entidades lógicas / abstracted em cima de suas tabelas, então vá para o framework entidade.

 12
Author: vintana, 2008-09-17 07:22:11

Nenhum deles ainda suporta os únicos tipos de dados SQL 2008. A diferença da minha perspectiva é que a entidade ainda tem a chance de construir um modelo em torno do meu datatype geográfico em algum lançamento futuro, e Linq para SQL, sendo abandonado, nunca irá.

Pergunto-me o que se passa com o nHibernate ou o OpenAccess...
 8
Author: John Dunagan, 2009-04-19 05:48:50
Eu acho que se você precisa desenvolver algo rápido sem coisas estranhas no meio, e você precisa da facilidade para ter entidades que representam suas tabelas: O Linq2Sql pode ser um bom aliado, usando-o com o LinQ liberta um grande momento de desenvolvimento.
 7
Author: MRFerocius, 2013-10-14 10:22:49
Estou a trabalhar para um cliente que tem um grande projecto que usa Linq-to-SQL. Quando o projeto começou, era a escolha óbvia, porque o Entity Framework estava faltando algumas características principais na época e o desempenho do Linq-to-SQL era muito mais btter.

Agora a EF evoluiu e a Linq-para-SQL carece de uma característica importante para serviços altamente escaláveis, que é o suporte para operações async. Temos mais de 100 pedidos por segundo às vezes e apesar de termos optimizado as nossas bases de dados, a maioria as consultas ainda levam vários milissegundos para completar. Devido às chamadas de banco de dados síncronos, o thread está bloqueado e não está disponível para outras solicitações.

Estamos pensando em mudar para a estrutura de entidade, apenas para esta característica. É uma pena que a Microsoft não implementou suporte async no Linq-to-SQL (ou open-sourced it, para que a comunidade pudesse fazê-lo).
 4
Author: Ramon de Klein, 2017-05-07 17:43:56

O LINQ para o SQL e a estrutura da entidade parecem semelhantes à superfície. Ambos fornecem LINQ questionando-se sobre um banco de dados usando um modelo de dados.

O LINQ para o SQL evoluiu do projecto LINQ, que veio de uma equipa de trabalho com desenvolvimento da linguagem.Enquanto o framework da entidade era um projeto da equipe de programabilidade de dados e estava focado na linguagem SQL da entidade. A Microsoft não tem qualquer intenção de depreciar o LINQ ao SQL.

LINQ para SQL ainda é a parte de ADO.NET enquanto O Entity framework tem API separada. Entity framework é a versão mais elevada de LINQ para SQL.O Entity framework usa o modelo de dados de entidade para fazer a ligação entre a sua aplicação e o seu armazenamento de dados. É o modelo de dados de entidade, ou EDM, que fornece a definição do seu esquema conceitual, bem como a informação do esquema de banco de dados necessária para interagir com o banco de dados e, finalmente, um esquema de mapeamento que se liga a dois.

Aqui estão algumas tarefas executadas pelo Entity Framework(dados da entidade modelo).

* Gera automaticamente classes a partir do modelo e actualiza essas classes dinamicamente, sempre que o modelo muda.

• cuida de toda a conectividade do banco de dados para que os desenvolvedores não sejam sobrecarregados por ter que escrever muitos códigos para interagir com o banco de dados.

* fornece uma sintaxe comum de consulta para questionar o modelo, não o banco de dados, e então traduz essas consultas em consultas que o banco de dados pode entender.

• fornece um mecanismo para rastrear as mudanças nos objetos do modelo como eles estão sendo usado nas aplicações e lida com as atualizações para o banco de dados.

 2
Author: Rajput, 2016-10-11 09:34:26

Linq-to-SQL

Ele é provedor que suporta apenas o servidor SQL. É uma tecnologia de mapeamento para mapear tabelas de bases de dados do servidor SQL para objetos. net. É a primeira tentativa da Microsoft de um mapeador ORM-Object-relacional.

Linq-to-Entities

é a mesma idéia, mas usando o Entity Framework em segundo plano, como o ORM - novamente a partir da Microsoft, ele suporta múltiplos banco de dados principal vantagem do entity framework é que o desenvolvedor pode trabalhar em qualquer banco de dados não precisa aprender a sintaxe para realizar qualquer operação em diferentes bancos de dados

De acordo com a minha experiência pessoal, Ef é melhor (se não tem ideia sobre SQL) o desempenho em LINQ é um pouco mais rápido do que a linguagem EF reason LINQ escrita em lambda.

 2
Author: Umang Patwa, 2017-02-21 05:36:24