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

.net .net-4.0 entity-framework linq-to-sql

Question

Je vérifiais la deuxième édition de Professional ASP.NET MVC et réalisais que EF remplaçait LINQ to SQL. LINQ to SQL me semble familier depuis le premier livre, mais je ne connais rien à EF. Quoi qu’il en soit, lors de la lecture du code, il semble que rien n’a changé sauf le nom. Mêmes anciennes classes de référentiel, mêmes anciennes fonctions.

J'ai fait une petite recherche. Je sais que LINQ n'est pas limité à SQL. De plus, EF n'est pas limité aux serveurs SQL de la famille Microsoft. Dans cette question de deux ans, les gens ne sont pas contents d'EF, ils disent que c'est compliqué et tout. Mais maintenant, je lis le même code sous le nom EF. Seules les classes sont générées avec ADO.NET Entity Model insted de LINQ to SQL. Quelqu'un peut-il clarifier les choses à propos des fonctionnalités EF puisqu'il s'agit désormais de l'ORM standard de facto?

Réponse acceptée

Ils sont quelque peu similaires et peuvent être utilisés de manière très similaire, en termes de code, mais ils présentent des différences importantes. Notez que "LINQ" n’est pas la même chose que "LINQ to SQL"; l'EF utilise également LINQ. Quelques différences notables sont:

  • LINQ to SQL est principalement basé sur SQL Server, pas tant par conception que par implémentation. EF est conçu pour prendre en charge et prend en charge plusieurs bases de données, si vous avez un fournisseur ADO.NET compatible.
  • En sortie de boîte, LINQ to SQL a une histoire très médiocre pour les modifications 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 les personnalisations.
  • L'EF prend en charge des fonctionnalités de modèle telles que les relations plusieurs à plusieurs et l'héritage. LINQ to SQL ne les prend pas directement en charge.
  • Dans .NET 3.5, LINQ to SQL supportait beaucoup mieux la fonctionnalité spécifique à SQL-Server que l'EF. Ce n'est généralement pas le cas dans .NET 4; ils sont assez similaires à cet égard.
  • L'EF vous permet de choisir la modélisation Model First, DB First ou Code First. LINQ to SQL, prêt à l'emploi, ne prend en charge que DB First.

Réponse populaire

EF est arrivé à maturité avec la v4.0. Avant cela, c'était un peu pénible à utiliser et je ne le recommandais pas. Ma recommandation est 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 to SQL. Mais son architecture est tout à fait différente: EF4 agit en tant que fournisseur LINQ pour un fournisseur (EF) ADO.NET, qui englobe ensuite un autre fournisseur ADO.NET. Il y a donc de nouvelles choses comme Entity SQL (que je n'utilise pas) et EF prenant en charge différents fournisseurs ADO.NET sous-jacents (que j'utilise).

Le système de modélisation XML utilisé par EF permet également des abstractions de mappage plus puissantes . L'une de celles que j'utilise régulièrement est d'avoir différentes tables avec les mêmes clés primaires mappées vers une relation d'héritage d'entité; D'après ce que je comprends, le seul moyen de faire cela dans LINQ to SQL est via une "colonne de sélecteur" (bien que je n'ai jamais essayé cela dans LINQ to SQL).



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow