2009-10-06 3 views
1

Il y a quelques questions "devrais-je choisir ceci ou cela" sur SO et Google, ainsi que beaucoup de comparaison entre LINQ2SQL et LINQ2E. J'ai vu des inconvénients, des différences, des inconvénients, des avantages, des limitations, etc.De l'ancien DataLayer au LINQ en passant par le SQL/Entity Framework

Je ne peux pas dire que je suis un expert mais j'aimerais savoir "que feriez-vous" si vous faisiez face à ce scénario et pourquoi.

Je dois ajouter des choses à une "ancienne" application 2.0 qui a été récemment migrée vers la version 3.5 (elle a été compilée en quelques exemplaires, avec quelques avertissements ici et là). Comme je dois ajouter de nouvelles choses, je veux commencer à utiliser LINQ (2SQL ou Entities). Par le passé, j'ai travaillé avec Linq2SQL et j'aime le fait que c'est une solution rapide et facile à utiliser ... Si vous ne voulez rien faire de trop bizarre. La relation naturelle entre les tables et autres est une aubaine si vous venez des anciens "Recordsets". La possibilité d'avoir différents datacontexts dépend également de l'ensemble de tables avec lequel vous voulez travailler. Comme la quantité de choses et de nouvelles fonctionnalités augmente, j'ai commencé à envisager la possibilité d'essayer l'Entity Framework au lieu de Linq2SQL. Ce que je n'aime pas à propos de ce dernier est l'incapacité à gérer les relations Many2Many sans avoir recours à un hack.

C'est là Entity Framework vient. Mais , vous ne pouvez pas avoir plusieurs « petits modèles » comme vous le faites avec Linq2Sql et les « DataContexts », à moins que vous sacrifier des choses some et quelques trucs other.

La base de données contient actuellement 218 tables, mais elle ne grossit pas considérablement. Une nouvelle table de temps en temps, mais nous ne parlons pas de 10 tables par jour. Je dirais que nous aurons du mal à atteindre 250 tables au cours de l'année suivante.

Il sont Beaucoup 2 De nombreuses relations, certaines avec le seul PK/PK et certains avec des agrégats (qui Entity Framework ne prend pas en magically handle, mais il peut y faire face. C'est la raison pour laquelle je ne voudrais pas à commencer par Linq2SQL à moins que le hack est « ok » et une méthode acceptée.

que feriez-vous? compromis les relations n..n (sachant que même quand il y a un hack, il ne sera pas aussi élégant ni « supporté "comme une solution intégrée) et aller avec Linq2SQL et sa" avoir beaucoup de petites bases de données que vous créez et détruire "philosophie ou, d'autre part, continuer avec Entity Framework, avoir gigantesque données modèle avec toutes les tables ou les relations et commencer à partir de là? Même lorsque la création de plusieurs modèles ont des inconvénients (voir les liens là-haut) et avoir un modèle géant a par contre.

Il y a aussi des commentaires non-officiels sur Microsoft "drop" Linq2SQL (je doute mais on ne sait jamais). Notre base de données est MSSQL et je ne vois pas cela changer bientôt.

Toute expérience dans ce domaine sera appréciée.

+0

Comment êtes-vous marié au concept d'utilisation des concepteurs O/R fournis avec LinqToSql/EntityFramework? On dirait que vous insistez pour avoir ce soutien, mais vous avez plus de 200 tables. À cette échelle, quelque chose comme SQLMetal/EdmGen offrirait probablement une meilleure expérience globale. –

+0

duplication possible de [Conversion d'un DAL LinqToSql en EntityFramework] (http://stackoverflow.com/questions/787807/converting-a-linqtosql-dal-to-entityframework) –

Répondre

1

Je traite des relations plusieurs-à-plusieurs très bien dans Linq2SQL.

Voir here pour une méthode d'extension efficace pour résoudre vos problèmes!

Personnellement, je trouve que l'utilisation d'un modèle monolithique est la plus facile à gérer.

+0

Bien que j'aime la solution (autant que celle que je lié) il est encore un peu complexe et nécessite une édition manuelle dbml (pour ajouter l'attribut) et brise également le concepteur. Par "un modèle monolithique", vous entendez le modèle d'entité ou un seul contexte de données Linq2sql? –

+0

Je n'ai pas utilisé EF, donc je veux dire Linq2SQL. Il existe peu d'outils de génération personnalisés pour Linq2SQL qui facilitent grandement les modifications. J'utilise actuellement une version fortement modifiée de http://www.codeplex.com/l2st4 pour tout réparer après avoir simplement fait glisser toutes les tables vers la surface du concepteur. – leppie

+1

J'ai un modèle avec plus de 400 entités dans un seul modèle Linq-to-SQL. Fonctionne très bien. Si vous faites cela sous .net 3.5, allez avec L2S. Quand 4.0 est sorti et stable, il peut valoir la peine de réévaluer EF mais EFv1 a trop de showstoppers pour quelque chose de plus complexe que le NorthwindEF db ... JMHO – KristoferA

0

Que ferais-je dans votre situation? J'utiliserais NHibernate et probablement Castle Active Record.

Pourquoi? Parce que cette solution offre le meilleur support pour les scénarios du «monde réel», en particulier ceux que vous mentionnez. NHibernate évolue avec votre projet et ne vous limite pas. C'est fondamentalement gratuit. NHibernate est une solution très mature et bien testée. Vous ne mentionnez pas NHibernate comme quelque chose que vous cherchez, donc je ne suis pas sûr de ce qui ne vous plaît pas à cet égard (il semble que vous avez assez lu que vous auriez rencontré cette option).

LinqToSql/EntityFramework n'offre pas beaucoup de choses que vous ne pouvez pas obtenir avec NHibernate.

+1

La raison pour laquelle je n'ai pas considéré NHibernate est parce que nous utilisons déjà un OLD ORM (Gentle) qui a été abandonné par les auteurs. Nous ne voulons pas sauter dans un autre projet (peu importe son degré de maturité) qui pourrait disparaître à l'avenir, en plus du fait que ce soit (pour autant que j'ai vu/lu/entendu) difficile à maîtriser au début. En outre, Linq offre une bonne syntaxe. ;) Lorsque nous avons choisi Gentle sur NHibernate, c'était parce que Gentle était "meilleur, plus rapide et Uncut". Je suppose que c'était une mauvaise décision en 2005.: S –

+0

Cela dit, je ne rejette pas NHibernate car il semble être très mature maintenant, mais je crains que cela puisse poser une courbe d'apprentissage ... –

+0

NHibernate supporte Linq . À mon avis, NHibernate a une courbe d'apprentissage similaire à celle des autres ORM. Certains ORM semblent simplement plus simples qu'ils ne le sont en réalité. :) La plupart des ORM «simples» sont ainsi car ils manquent de fonctionnalités et sont capables de gérer de nombreux scénarios du monde réel. Si vous devez choisir l'une des solutions Microsoft ORM et que vous êtes préoccupé par l'avenir, EntityFramework a un avenir beaucoup plus prometteur. –