Quelle est la différence entre Entity Framework et LINQ to SQL? by.NET 4,0?

I was checking 2e édition de Professional ASP.NET MVC et realized EF a remplacé LINQ à SQL. Je suis familier à LINQ à SQL à partir du premier livre, mais je ne sais rien sur EF. De toute façon en lisant le code, il semble que rien n'a changé, sauf le nom. Mêmes anciennes classes de dépôt, mêmes anciennes fonctions.

j'ai fait une petite recherche. Je sais que LINQ n'est pas limité à SQL. Aussi EF n'est pas limité Microsoft-serveurs SQL famille. Dans cette question vieille de 2 ans les gens ne sont pas heureux avec EF, disant qu'il est trop compliqué et tout. Mais maintenant je lis le même code sous le nom de EF. Seules les classes sont générées avec ADO.NET modèle D'entité insté de LINQ à SQL. Est-ce que quelqu'un peut effacer le tapage sur les fonctionnalités EF puisque c'est l'ORM de standart de facto maintenant?

56
demandé sur Community 2010-07-21 00:16:42

4 réponses

ils sont quelque peu similaires, et peuvent être utilisés d'une manière très similaire, du point de vue du code, mais ils ont quelques différences importantes. Notez que " LINQ "n'est pas la même chose que" LINQ to SQL"; L'EF utilise aussi LINQ. Quelques différences notables sont:

  • LINQ à SQL est essentiellement SQL Server seulement, pas tant par sa conception que par sa mise en œuvre. Le FE est conçu pour prendre en charge, et prend en charge, plusieurs SRD, si vous avez un ADO.NET fournisseur.
  • Hors de la boîte, LINQ à SQL a une très mauvaise histoire pour les changements de métadonnées de base de données. Vous devez régénérer des parties de votre modèle à partir de zéro, et vous perdez des personnalisations.
  • le CE prend en charge les caractéristiques du modèle, comme les relations entre plusieurs personnes et l'héritage. LINQ to SQL ne les supporte pas directement.
  • dans .NET 3.5, LINQ à SQL avait un meilleur support pour les fonctionnalités spécifiques à SQL Server que L'EF. Ce n'est généralement pas vrai dans .NET 4; ils sont assez similaires à cet égard.
  • le FE vous permet de choisir le modèle en premier, Le DB en Premier ou le Code en premier. LINQ à SQL, hors de la boîte, ne supporte vraiment DB en premier.
73
répondu Craig Stuntz 2010-07-20 21:43:46

EF est arrivé à maturité avec v4.0. Avant ça, c'était un peu pénible à utiliser, et je ne l'ai pas recommandé. Maintenant, je recommande que tous les nouveaux codes LINQ-to - DB utilisent EF4.

en ce qui concerne les nouvelles fonctionnalités, la partie LINQ est en fait assez similaire à LINQ à SQL. Mais c'est une architecture assez différente: EF4 agit comme un fournisseur de LINQ à un (EF) ADO.NET fournisseur qui enveloppe ensuite un autre ADO.NET fournisseur. Donc il y a de nouvelles choses comme Entity SQL (que je ne pas utiliser), et EF prise en charge différents sous-jacents ADO.NET fournisseurs (que j'utilise).

le système de modélisation XML que EF utilise permet des abstractions de cartographie plus puissantes , ainsi. Une chose que j'utilise régulièrement est d'avoir différentes tables avec les mêmes clés primaires de mappage à une relation d'héritage d'entité; de ce que je comprends, la seule façon de le faire dans LINQ à SQL est via une "colonne de sélecteur" (bien que je n'ai jamais essayé cela dans LINQ à SQL).

17
répondu Stephen Cleary 2010-07-21 02:14:53

Différence entre LINQ to SQL et Entity Framework:

LINQ to SQL:

  • il ne fonctionne qu'avec la base de données SQL Server.
  • il génère un .dbml pour maintenir la relation
  • il n'a pas le support pour le type complexe.
  • il ne peut pas générer de base de données à partir du modèle.
  • Il ne permet qu'une association entre l'entité les classes et les tables /vues relationnelles.
  • il vous permet d'interroger des données en utilisant DataContext.
  • il fournit une approche étroitement couplée.
  • il ne peut être utilisé pour le développement rapide d'applications qu'avec SQL Server.

Entity Framework

  • il peut fonctionner avec diverses bases de données comme Oracle, DB2, MYSQL, SQL Server etc.

  • il génère un .fichiers edmx au départ. La relation est maintenue en utilisant 3 fichiers différents .csdl, .msl et .ssdl

  • il a le support pour le type complexe.

  • il peut générer la base de données à partir du modèle.

  • Il permet un-à-un, un-à-plusieurs, plusieurs-à-plusieurs mappages entre les classes d'Entité et le relationnel tableaux / vues

  • il vous permet d'interroger des données en utilisant EntitySQL, ObjectContext, DbContext.

  • Il fournit un couplage lâche approche. Depuis sa première approche de code vous permet d'utiliser le modèle D'Injection de dépendance qui le rend vaguement couplé .

  • il peut être utilisé pour le développement rapide d'applications avec RDBMS comme SQL Server, Oracle, DB2 et MySQL etc.

plus de détails

13
répondu IndieTech Solutions 2015-04-09 20:43:08

le dernier EF est beaucoup plus robuste, et vous n'êtes pas forcé dans une expérience pseudo-ORM pilotée par le concepteur (ou un tas de config si vous avez essayé de le faire sans le concepteur). Votre modèle peut être des objets POCO maintenant au lieu de quelques BS partiellement déformés par une classe de designer qui est intrinsèquement couplé avec du code de designer, vous pouvez vous éloigner du designer entièrement sans avoir l'impression que vous nagez en amont, et en général, il se sent juste comme s'ils ont écouté la communauté ou en fait j'ai essayé d'imiter les solutions existantes, testées au combat, au lieu de faire une version pour les "Morts" ou ce que L2Sql était supposé être.

4
répondu heisenberg 2010-07-20 20:25:37