59 votes

Quelle est la différence entre Entity Framework et LINQ to SQL par .NET 4.0?

J'ai été vérifier la 2ème édition de Professionnel ASP.NET MVC et réalisé EF remplacé LINQ to SQL. Je suis familier de LINQ to SQL de le premier livre, mais je ne sais rien à propos de EF. De toute façon en lisant le code, il semble que rien n'a changé, sauf le nom. Même vieux classes de dépôt, même anciennes fonctions.

J'ai fait un peu de recherche. Je sais LINQ n'est pas limitée à SQL. Aussi EF n'est pas limitée par Microsoft de la famille de serveurs SQL. Dans ce 2 ans question de personnes ne sont pas heureux avec EF, disant que c'est trop compliqué et tout et tout. Mais maintenant, je suis en train de lire même code en vertu de l'EF nom. Seules les classes sont générées avec ADO.NET Modèle d'Entité insted de LINQ to SQL. Quelqu'un peut-il effacer les histoires à propos d'EF fonctionnalités depuis il est, de facto, le standart ORM maintenant?

77voto

Craig Stuntz Points 95965

Ils sont à peu près semblable, et peut être utilisé dans une manière très similaire, au niveau 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 également LINQ. Des différences notables sont:

  • LINQ to SQL est en grande partie SQL Server uniquement, non pas tant par le design que par la mise en œuvre. L'EF est destinée à encourager, et prend en charge, plusieurs DBs, si vous avez un compatible ADO.NET fournisseur de.
  • Hors de la boîte, LINQ to SQL a une mauvaise histoire de DB modifications de métadonnées. Vous devez régénérer des parties de votre modèle à partir de zéro, et vous perdez des personnalisations.
  • L'EF prend en charge les fonctionnalités de modèle comme plusieurs-à-plusieurs relations et à l'héritage. LINQ to SQL ne prend pas directement en charge ces.
  • Dans .NET 3.5, LINQ to SQL avait bien meilleure prise en charge de SQL-Server-une fonctionnalité spécifique de l'EF. C'est surtout vrai dans .NET 4; ils sont assez semblables à cet égard.
  • L'EF vous permet de choisir le Premier Modèle, DB Première ou le Premier Code de la modélisation. LINQ to SQL, hors de la boîte, vraiment ne supporte DB Première.

17voto

Stephen Cleary Points 91731

EF est venu de l'âge avec v4.0. Avant cela, c'était un peu d'une douleur à utiliser, et je ne le recommande pas. Maintenant, ma recommandation est que tous les nouveaux LINQ-to-DB code EF4.

Autant que de nouvelles fonctionnalités, allez, LINQ partie est en fait assez similaire à LINQ to SQL. Mais il est tout à fait différente de l'architecture: EF4 agit comme un fournisseur LINQ pour un (EF) ADO.NET fournisseur de qui encapsule puis un autre ADO.NET fournisseur de. Donc, il y a de nouvelles choses, comme Entité SQL (que je n'utilise pas), et de l'EF à l'appui des différents sous-jacents ADO.NET fournisseurs (que j'utilise).

Le XML du système de modélisation par EF utilise permet plus puissant de la cartographie des abstractions, ainsi. Celui que j'utilise régulièrement est d'avoir des tables différentes avec les mêmes clés primaires de la cartographie à une entité de la relation d'héritage; à partir de ce que je comprends, le seul moyen de le faire dans LINQ to SQL est par l'intermédiaire d'un "sélecteur de colonne" (bien que je n'ai jamais essayé ce dans LINQ to SQL).

4voto

heisenberg Points 6120

Dernière EF est beaucoup plus robuste, et vous n'êtes pas contraint à une designer conduit pseudo-ORM expérience (ou un marécage de la configuration, si vous avez essayé de le faire sans le concepteur). Votre modèle peut être des objets POCO maintenant, au lieu de quelques concepteur piloté par classe partielle de déformation de bs c'est intrinsicly couplé avec le designer piloté par code, vous pouvez obtenir loin du concepteur entièrement sans se sentir comme vous êtes nager en amont, et en général il se sent juste comme ils ont écouté la communauté ou effectivement essayé d'imiter existant, la bataille des solutions testées au lieu de faire une version pour les "Morts" ou quel que soit L2Sql était censé être.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X