Cadre d'entité vs LINQ à SQL

maintenant que .NET v3.5 SP1 a été publié (avec VS2008 SP1), nous avons maintenant accès au cadre d'entité.net.

ma question Est la suivante. Quand vous essayez de décider entre utiliser le framework Entity et LINQ pour SQL comme ORM, Quelle est la différence?

si je comprends bien, le framework Entity (lorsqu'il est utilisé avec LINQ to Entities) est un 'big brother' pour LINQ to SQL? Si c'est le cas quels avantages a-t-elle? Que peut-il faire que LINQ à SQL ne peut pas faire tout seul?

763
demandé sur Charles 2008-08-12 15:04:11

17 réponses

LINQ à SQL prend en charge seulement 1 à 1 cartographie des tables de base de données, vues, sprocs et fonctions disponibles dans Microsoft SQL Server. C'est une excellente API à utiliser pour une construction d'accès rapide aux données dans des bases de données SQL Server relativement bien conçues. LINQ2SQL a d'abord été publié avec C# 3.0 et .net Framework 3.5.

LINQ to Entities (ADO.Net Entity Framework) est une API ORM (Object Relational Mapper) qui permet une large définition des modèles de domaines d'objets et de leurs relations avec de nombreux ADO.Net fournisseurs de données. En tant que tel, vous pouvez mélanger et faire correspondre un certain nombre de fournisseurs de base de données, des serveurs d'application ou des protocoles différents pour concevoir un mash-up agrégé d'objets qui sont construits à partir d'une variété de tables, sources, services, etc. ADO.Net le cadre a été publié avec le .net Framework 3.5 SP1.

c'est un bon article d'introduction sur MSDN: introduisant LINQ aux données relationnelles

450
répondu Kris 2008-09-21 03:22:59

je pense que la réponse rapide et sale est que

  • LINQ à SQL est le moyen rapide et facile de le faire. Cela signifie que vous irez plus vite, et livrer plus vite si vous travaillez sur quelque chose de plus petit.
  • Entity Framework est le tous les, no-holds-barred façon de le faire. Cela signifie que vous prenez plus de temps, de développer plus lentement, et avoir plus de flexibilité si vous travaillez sur quelque chose de plus grand.
190
répondu Brad Tutterow 2009-05-23 00:14:03

LINQ to SQL is Truly Dead? de Jonathan Allen pour InfoQ.com

Matt Warren décrit [LINQ à SQL] comme quelque chose qui "n'était même pas supposé exister."Essentiellement, il était censé être stand-in pour les aider à développer LINQ jusqu'à ce que le vrai ORM était prêt.

...

L'échelle de Entity Framework l'a fait rater la date limite de .NET 3.5/Visual Studio 2008. Il a été terminé à temps pour le malheureusement nommé ".NET 3.5 Service Pack 1", qui ressemblait plus à une version majeure qu'un service pack.

...

les développeurs n'aiment pas [ADO.NET cadre de L'entité] en raison de la complexité.

...

à partir de .NET 4.0, LINQ to Entities sera la solution d'accès aux données recommandée pour LINQ to relational scenarios.

104
répondu Zack Peterson 2008-11-03 15:53:25

il y a un certain nombre de différences évidentes soulignées dans cet article @lars posté, mais la réponse courte est:

  • L2S est étroitement associé - propriété de l'objet spécifique du champ de base de données ou, plus correctement, objet de la cartographie à un schéma de base de données
  • L2S ne fonctionnera qu'avec SQL Server (autant que je sache)
  • EF permet de mapper une seule classe à plusieurs tables
  • EF poignée M-M relations
  • EF aura la capacité de cibler toute ADO.NET fournisseur de données

la prémisse initiale était L2S est pour le développement rapide, et EF pour les applications n-tier plus" d'entreprise", mais qui vend L2S un peu court.

86
répondu JamesSugrue 2008-08-12 11:15:24

LINQ to SQL

  1. homogene datasource: SQL Server
  2. recommandé pour les petits projets seulement lorsque la structure des données est bien conçue
  3. La cartographie
  4. peut être changée sans recompiler avec SqlMetal.exe
  5. .dbml (Base de données Markup Language)
  6. cartographie individuelle entre tableaux et classes
  7. prend en charge TPH l'héritage
  8. ne supporte pas les types complexes
  9. stockage-première approche
  10. Base de données centrée sur la vue d'une base de données
  11. créé par C # team
  12. pris en charge, mais pas d'autres améliorations destinées à

Entity Framework

  1. Heterogeneus source de données: en charge de nombreux fournisseurs de données
  2. Recommandé pour tous les nouveaux projets sauf:
    • small ones (LINQ to SQL)
    • lorsque la source de données est un fichier plat (ADO.NET)
  3. Mapping peut être modifié sans recompilling lors de la configuration du modèle et des fichiers de mappage des Métadonnées Artefact Processus de Copie vers le Répertoire De Sortie
  4. .edmx (Entity Data Model) qui contient:
    • LSED (Stockage Langage de Définition de Schéma)
    • CSDL (Conceptual Schema Definition Language)
    • MSL (Cartographie Langage de Spécification)
  5. un-à-Un, un-à-plusieurs, plusieurs-à-un les mappages entre les tables et les classes
  6. supporte l'héritage:
    • TPH (tableau par hiérarchie)
    • TPT (tableau par Type)
    • TPC (tableau par classe de béton)
  7. supporte les types complexes
  8. Code-tout d'abord, le Modèle de la première, de Stockage-premières approches
  9. centrée sur les Applications vue d'une base de données
  10. créé par SQL Server team
  11. l'Avenir de Microsoft Api de Données

voir aussi:

61
répondu Ryszard Dżegan 2015-05-13 08:36:58

mon expérience avec le cadre D'entité a été moins que stellaire. D'abord, vous devez hériter des cours de base de L'EF, alors dites au revoir à POCOs. Votre conception devra être autour de L'EE. Avec LinqtoSQL, je pourrais utiliser mes objets d'affaires existants. En outre, il n'y a pas de chargement paresseux, vous devez mettre en œuvre vous-même. Il y a des solutions de rechange pour utiliser POCOs et lazy loading, mais elles existent IMHO parce que EF n'est pas encore prêt. Je compte y revenir après 4.0

50
répondu Jiyosub 2008-12-08 03:50:54

j'ai trouvé une très bonne réponse ici qui explique Quand utiliser ce que dans des mots simples:

la règle empirique de base pour quel cadre utiliser est comment planifier sur éditer vos données dans votre couche de présentation.

  • Linq-To-Sql - utilisez ce framework si vous prévoyez d'éditer un face à face relation de vos données dans la couche de présentation. Ce qui signifie que vous ne prévoyez pas de combiner les données de plus d'une table dans une vue ou de la page.

  • Entity Framework - utilisez ce cadre si vous prévoyez sur combinaison de données de plus d'un tableau dans votre vue ou page. Faire plus clairement, les termes ci-dessus sont spécifiques aux données qui seront manipulé dans votre vue ou page, pas seulement affiché. C'est important de comprendre.

avec le cadre D'entité vous êtes en mesure de "fusionner" les données déposées ensemble présenter à la couche présentation sous une forme modifiable, puis lorsque ce formulaire est soumis, EF saura comment mettre à jour toutes les données les divers tableaux.

il y a probablement des raisons plus précises de choisir le FE plutôt que le L2S, mais ce serait probablement le plus simple à comprendre. L2S n'est pas ont la capacité de fusionner les données pour voir la présentation.

46
répondu Nawaz 2012-03-23 15:52:54

J'ai l'impression que votre base de données est assez lourde ou très mal conçue si Linq2Sql ne correspond pas à vos besoins. J'ai environ 10 sites web à la fois plus grand et plus petit tous en utilisant Linq2Sql. J'ai cherché et Entity framework à plusieurs reprises mais je ne trouve pas de bonne raison de l'utiliser sur Linq2Sql. Cela dit, j'essaie d'utiliser mes bases de données comme modèle de sorte que j'ai déjà une correspondance de 1 à 1 entre le modèle et la base de données.

à mon emploi actuel, nous avons une base de données avec plus de 200 tables. Une vieille base de données avec beaucoup de mauvaises solutions de sorte que là je pourrais voir les avantages du cadre D'entité sur Linq2Sql mais encore je préférerais redessiner la base de données puisque la base de données est le moteur de l'application et si la base de données est mal conçue et lente alors mon application sera également lente. Utiliser le cadre Entity sur une telle base de données semble comme un quickfix pour camoufler le mauvais modèle, mais il ne pourrait jamais camoufler la mauvaise performance que vous obtenez d'une telle base de données.

35
répondu terjetyl 2008-11-21 19:52:18

les réponses ici ont couvert beaucoup de différences entre Linq2Sql et EF, mais il y a un point clé qui n'a pas été accordé beaucoup d'attention: Linq2Sql soutient seulement SQL Server tandis que EF a des fournisseurs pour les RDBM suivants:

fourni par Microsoft:

  • ADO.NET pilotes pour SQL Server, OBDC et OLE DB

Via des tiers fournisseurs:

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

pour n'en citer que quelques-uns.

Cela fait de EF une puissante abstraction de programmation au-dessus de votre magasin de données relationnelles, ce qui signifie que les développeurs ont un modèle de programmation cohérent à travailler avec indépendamment du magasin de données sous-jacent. Cela pourrait être très utile dans les situations où vous développez un produit dont vous voulez assurer l'interopérabilité avec une vaste gamme de SGBDR communs.

une autre situation où cette abstraction est utile est celle où vous faites partie d'une équipe de développement qui travaille avec un certain nombre de clients différents, ou différentes unités commerciales au sein d'une organisation, et vous voulez améliorer la productivité des développeurs en réduisant le nombre de RDBM, ils doivent se familiariser avec afin de prendre en charge une gamme d'applications différentes en plus de différents RDBM.

21
répondu saille 2014-03-17 03:19:58

j'ai trouvé que je ne pouvais pas utiliser plusieurs bases de données dans le même modèle de base de données en utilisant EF. Mais dans linq2sql je pourrais juste en préfixant les noms de schéma avec les noms de base de données.

C'est l'une des raisons pour lesquelles j'ai commencé à travailler avec linq2sql. Je ne sais pas si EF a encore permis cette fonctionnalité, mais je me souviens avoir lu qu'il était destiné à ne pas permettre cela.

15
répondu Banford 2011-02-17 15:36:00

si votre base de données est simple et simple, LINQ à SQL fera l'affaire. Si vous avez besoin d'entités logiques/abstraites sur le dessus de vos tables, alors optez pour Entity Framework.

12
répondu vintana 2008-09-17 07:22:11

ne supporte pas encore les types de données uniques SQL 2008. La différence de mon point de vue est que L'entité a encore une chance de construire un modèle autour de mon type de données géographiques dans une future version, et Linq à SQL, étant abandonné, ne le fera jamais.

Wonder what's up avec nHibernate, ou OpenAccess...

8
répondu John Dunagan 2009-04-19 05:48:50

je pense que si vous avez besoin de développer quelque chose rapidement sans choses étranges au milieu, et vous avez besoin de la facilité pour avoir des entités représentant vos tables:

Linq2Sql peut être un bon allié, en l'utilisant avec LinQ déchaîne un grand timing de développement.

7
répondu MRFerocius 2013-10-14 10:22:49

je travaille pour un client qui a un grand projet qui utilise Linq-to-SQL. Lorsque le projet a commencé, c'était le choix évident, car Entity Framework manquait de fonctionnalités majeures à l'époque et la performance de Linq-to-SQL était bien meilleure.

maintenant EF a évolué et Linq-to-SQL manque une caractéristique majeure pour les services hautement évolutifs et qui est la prise en charge des opérations asynchrones. Nous avons parfois plus de 100 demandes par seconde et malgré nous avons optimisé notre bases de données, la plupart des requêtes prennent encore plusieurs millisecondes à compléter. En raison des appels de base de données synchrones, le thread est bloqué et non disponible pour d'autres requêtes.

nous pensons passer à Entity Framework, uniquement pour cette fonctionnalité. C'est une honte que Microsoft n'ait pas implémenté le support async dans Linq-to-SQL (ou open-sourced it, pour que la communauté puisse le faire).

4
répondu Ramon de Klein 2017-05-07 17:43:56

LINQ à SQL et le cadre de L'entité ressemblent sur la surface. Ils fournissent tous les deux LINQ de l'interrogation d'une base de données à l'aide d'un modèle de données.

LINQ à SQL a évolué à partir du projet LINQ, qui est sorti de l'équipe de travail avec le développement du langage.Tandis que le cadre D'entité était un projet de L'équipe de programmabilité de données et a été axé sur le langage SQL D'entité. Microsoft n'a pas l'intention de déprécier LINQ à SQL.

LINQ à SQL is toujours la partie de ADO.NET while Entity framework has seperate API. Entity framework est la version supérieure de LINQ à SQL.Entity framework utilise le modèle de données Entity pour faire le pont entre votre application et votre data store. C'est le modèle de données D'entité, ou EDM, qui fournit la définition de votre schéma conceptuel ainsi que les informations de schéma de base de données nécessaires pour interagir avec la base de données et finalement un schéma de mappage qui se lie à deux.

Voici quelques tâches réalisé par le cadre de L'entité(modèle de données de L'entité).

"151900920 • * génère automatiquement des classes à partir du modèle et met à jour ces classes dynamiquement chaque fois que le modèle change.

"151900920 • * s'occupe de toute la connectivité de la base de données afin que les développeurs ne soient pas accablés par le fait d'avoir à écrire beaucoup de code pour interagir avec la base de données.

"151900920 • * fournit une syntaxe de requête commune pour interroger le modèle, pas la base de données, et traduit ensuite ces des requêtes vers des requêtes que la base de données peut comprendre.

"151900920 • * fournit un mécanisme pour suivre les changements aux objets du modèle pendant qu'ils sont utilisé dans les applications et gère les mises à jour de la base de données.

2
répondu Rajput 2016-10-11 09:34:26

Linq-to-SQL

Il est fournisseur prend en charge SQL Server uniquement. C'est une technologie de mappage pour mapper des tables de bases de données SQL Server vers des objets .NET. Est la première tentative de Microsoft à un ORM-Object-Relational Mapper.

Linq-to-Entités

est la même idée, mais en utilisant le cadre D'entité dans l'arrière-plan, comme L'ORM-encore une fois de Microsoft, Il prend en charge plusieurs base de données principal avantage de l'entity framework est développeur peut travailler sur une base de données pas besoin d'apprendre la syntaxe d'effectuer toute opération sur les différentes bases de données différentes

D'après mon expérience personnelle Ef est mieux (si vous n'avez aucune idée de SQL) les performances en LINQ est un peu plus rapide que la raison EF langue LINQ écrit dans lambda.

2
répondu Umang Patwa 2017-02-21 05:36:24