2008-11-09 6 views
25

Étant donné que LINQ to SQL n'obtiendra probablement pas autant de développement actif que Entity Framework, pensez-vous qu'il est préférable de passer à Entity Framework?Pensez-vous qu'il est avantageux de passer à Entity Framework?

J'ai personnellement trouvé que EF était très maladroit et difficile à utiliser par rapport à LINQ to SQL, ce qui me semble très naturel.

EDIT: J'ai récemment publié un article sur mon blog au sujet de mes sentiments à l'égard de cette décision potentiel ...

ADO.NET v LINQ to SQL

Répondre

22

OMI, au moment.

Il est clair (à partir de recent announcements en particulier) que EF est en pour de lourdes révisions que le scénario "thunderdome" se joue entre LINQ-to-SQL et EF. Quoi qu'il arrive, EF (dans quelques années) sera certainement très différent de EF aujourd'hui. Ou certainement "assez différent" ;-p

En tant que tel, mon avis est: coller avec simple. Et simple est LINQ-to-SQL.

Je ne vois pas beaucoup d'avantages à apprendre un système notoirement complexe si je sais que ça va changer très bientôt.

Et je suis 100% avec vous sur LINQ to SQL ;-P

Si je besoin de quelque chose de plus que LINQ to SQL en ce moment, je regarderais NHibernate ou LLBLGen Pro peut-être.

(modifier - comme une mise à jour, ma position a adouci un peu, et herehere - mais je suis toujours en utilisant LINQ to SQL comme mon principal outil, aussi - LINQ to SQL isn't quite dead yet; -p).

+1

Droit sur !!! J'adore L2S, et je semi-déteste EF :) (pour des raisons concrètes et concrètes). –

+0

@ Timothy - oui, il y a des raisons. Des gens comme Ian Cooper pourraient parler * toute la journée * à leur sujet ;-p (bon gars, connaît ses trucs ORM) –

+0

D'accord, attention! Quand EF vNext et .net 4.0 sont sortis, il vaudra la peine de jeter un second coup d'œil. Jusque-là, L2S ... – KristoferA

2

Pour mémoire, une certaine hésitation quant à l'avenir de LINQ to SQL a été exprimé ici:

Is LINQ to SQL DOA?

Has Microsoft really killed LINQ to SQL?

+0

Mais mon point clé est: tant qu'il y a beaucoup de flux, investir lourdement est une erreur. LINQ-to-SQL nécessite très peu d'investissement, donc je ne vois pas cela comme un risque. –

+0

Je suis complètement d'accord, Marc. Je ne fais que souligner pour ceux qui ne sont pas au courant (comme je ne l'étais pas avant d'en avoir parlé récemment sur SO) que LINQ to SQL n'est pas sans risque. Risque faible, et certainement des avantages à court terme, à coup sûr. Vous pouvez dire par le volume de questions SO qu'il est très populaire – DOK

+0

En effet. Je dois aimer la stratégie: tuer la mise en œuvre que les gens aiment réellement ;-p En toute justice, c'est beaucoup plus complexe que cela, et j'attends avec impatience la "vraie" réponse dans quelques années (.NET 4.0). MS a une montagne de PR/dev-confidence à gravir ici. J'espère qu'ils réussiront ... –

3

Je suis d'accord avec Marc Gravell. Peut-être que lors de la sortie de la prochaine version d'Entity Framework (.net 4.0/VS2010), il y aura un avantage à utiliser EF, et il sera probablement très différent de la version actuelle de EF. Jusque-là au moins j'éviterai EF comme la peste pour autre chose que des tests/codes expérimentaux qui ne frapperont jamais la production.Le EF msdn forumEF msdn forum est plein d'exemples pourquoi EF n'est pas prêt pour le prime-time, mais je suis one particular example qui est un gagnant clair - ce qui serait normalement une simple requête de cinq tables (10-15 lignes de SQL) devient >1500 lines of SQL lorsque vous utilisez EF et le contrôle EntityDataSource:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3874607&SiteID=1

http://paste-it.net/public/q6ed5c2/

et quant à l'avenir de EF - avec Microsoft history of changing direction sur de grandes choses stratégiques durant la nuit, qui sait si leur s actuel » objectif trategic "avec EF se réalisera dans quelques années à partir de maintenant ..? Je suis sûr que je ne parierais pas dessus. Voir:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=4100399&SiteID=1#4107623

+0

Cette requête de 1 500 lignes est ridicule, je ne peux pas le croire. –

+0

Ouais, ces types de requêtes monstres sont ... surprenants. Voici un autre exemple intéressant. requête simple avec groupement + agrégation sur deux tables. L2S génère une requête efficace, pas L2E. http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/bb72fae4-0709-48f2-8f85-31d0b6a85f68 – KristoferA

2

LINQ to SQL ne semble pas être une option sauf si vous utilisez SQL Server (ou SQL Server Compact), de sorte que moi était une raison suffisante pour l'éviter et utiliser EF (je voulais utiliser PostgreSQL).

Il y a certainement assez de choses manquantes dans v1 de EF qui me ferait hésiter à le recommander. Il semble que la version 2 de l'EF (une fois sortie) soit la première version qui pourrait être sérieusement recommandée pour passer à.

+0

Spot sur - l2s est uniquement SQL Server. EF = autres fournisseurs –

6

Si vous faites du développement piloté par base de données, EF a de réels avantages aujourd'hui. J'ai utilisé à la fois LINQ to SQL et EF et travaillé à travers les nombreuses petites frustrations de EF v1.

Cependant, la seule chose qui a fait gagner EF v1 pour moi est la mise à jour étonnamment bonne de la base de données. Incroyablement, ce fonctionne réellement! Cela peut sembler trivial, mais si vous faites un design basé sur la base de données, vous voulez vous appuyer sur des outils pour créer vos classes pour vous et vous ne voulez pas avoir à régénérer votre modèle entier juste pour faire un changement.

Cela seul rend EF v1 mon choix. Je suggère d'ignorer les fonctionnalités avancées de EF v1 - il est loin d'être encore utilisable comme la plate-forme ambitieuse qu'il vise à être.

Mettez-vous à l'aise avec EF v1 et vous serez dans la meilleure position pour l'avenir.

Pete.

+4

La mise à jour 'bonne' de l'assistant de base de données '?? Celui qui ne détectera pas si vous changez la nullability, le type de données etc. sur des colonnes existantes? Celui qui remplace toute la partie SSDL de l'EDMX quand quelque chose est mis à jour, écrasant toutes les personnalisations que vous avez pu lui apporter? – KristoferA

+3

(suite) Celui qui ne peut pas rajouter une entité supprimée si vous n'utilisez pas un éditeur xml pour effacer manuellement les artefacts SSDL? Eh bien, ils disent que ce sera mieux dans Visual Studio 2010. En attendant, je suis en train de coller à L2S et de mettre à jour mon modèle en utilisant mon outil de synchronisation pour les modèles L2S qui appliquent les changements * seulement *. – KristoferA

7

J'ai terminé quelques projets MVC actuellement en production avec L2SQL sous le capot et j'ai trouvé cela très agréable à utiliser. Je suis en train de me lancer dans un nouveau projet et j'ai décidé de l'écrire en utilisant EF et L2EF étant donné les articles précédemment cités proclamant la mort de L2SQL. Après seulement quelques jours, j'ai décidé de retourner à L2SQL. Des choses simples comme avoir à mettre des clés étrangères pour les insertions en utilisant soit la syntaxe terrible ci-dessous ou des recherches inutiles m'ont choqué.

foo.Foreign_TypeReference.EntityKey = 
    new EntityKey("DataContextName.Foreign_Type", "Foreign_Type_Id", ForeignTypeId); 

Plutôt que:

foo.Foreign_Type_Id = ForeignTypeId; 

Je ne pense pas que ce sera si difficile au port L2SQL à une future version de EF comme L2SQL a un sous-ensemble de la fonctionnalité (bien mieux mis en œuvre). Les quelques choses que L2EF n'a pas L2EF, par exemple Single() et SingleOrDefault(), peuvent être migrées vers EF en créant quelques méthodes d'extension. Je pense qu'il faudra beaucoup moins de temps pour faire fonctionner le système en utilisant L2SQL et ensuite le porter plus tard quand EF n'est pas si malodorant.

+0

Cela résume assez bien pour moi. J'espère que EF vNext sera plus joli. –

-1

Récemment, j'ai dû rechercher quel projet ORM utiliser. Au début - essayé L2S. Ce n'était pas mal du tout, mais c'est déjà obsolète (MS ne le supportera plus), c'est pourquoi j'ai commencé à vérifier L2E. Je suis bien avec le code généré, mais la création de fausses vues, les entités et les mappages entre eux juste pour rendre la procédure stockée disponible pour ne pas remplir tous les champs de l'entité était une exagération pour moi. Et je voulais séparer ma couche dataaccess, donc - je devais mapper les données des objets générés à celles que j'avais faites.

Il m'a fallu quelques heures d'expérimentation avec NHibernate + Fluent NHibernate + LINQ pour NHibernate
pour coller avec cette combinaison.

+2

Ceci est incorrect. Microsoft a actuellement 5 devs sur LINQ to SQL. –

+0

aha ... Hier lire qu'ils corrigent des bugs. Mon erreur. Quoi qu'il en soit - cela ne change pas mon opinion. –

+0

.NET 4.0 aura un tas d'améliorations à LINQ To SQL http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40 –