2

Étant donné une procédure stockée, existe-t-il un moyen de générer automatiquement une couche d'accès aux données? Je comprends que cela peut être fait en utilisant Codesmith en créant des modèles cs, mais je me demandais s'il y a une solution gratuite/payante là-bas.Génération automatique de la couche DAL dans une application ASP.NET

Le plan est pour l'architecture Souhaitée:

code ASP.NET derrière -> Business Layer -> données Couche d'accès -> procédure stockée.

La couche BL agit comme un passage vers la couche DAL et peut également être générée automatiquement.

Des conseils/astuces sont vraiment appréciés!

+0

Vous pouvez utiliser un ORM, il y a beaucoup d'options gratuites, mais ORM ont tendance à offrir plus de valeur lorsqu'elles sont utilisées contre les tables, pas les procédures stockées. –

+0

Si vous êtes prêt à envisager des options commerciales (non-libres), quels sont les inconvénients de CodeSmith de votre point de vue? –

+0

CodeSmith fonctionne très bien! Je voulais savoir s'il existe un outil différent qui m'aide à obtenir un bon départ. Je me penchais aussi vers quelque chose qui est une partie du framework .NET (ou quelque chose par Microsoft) et CS est un outil 3ème partie – Nick

Répondre

1

Entity Framework dans sa forme actuelle est un non-démarrage pour les procédures stockées. Il y a simplement trop de travail manuel à faire pour que chaque procédure stockée fonctionne. Je ne peux pas parler de .net 4 Entity Framework, cependant.

LINQ to SQL est très facile à stocker. Exécutez SQLMETAL avec l'option/procs pour qu'il génère automatiquement votre DAL.

Deux contraintes, cependant:

  1. LINQ to SQL ne sera pas exécuter procs stockées qui utilisent SQL dynamique.
  2. LINQ to SQL également ne fonctionnera pas procs stockées qui renvoient des données à partir des tables temporaires.

La première raison évidente est que LINQ to SQL ne peut pas générer les métadonnées nécessaires pour ces sprocs, mais le SQL dynamique dans les process stockés est de toute façon une mauvaise pratique.

+0

Parmi les ORM disponibles, LinqToSql est l'un des mieux supportés pour les procédures stockées. Cela dit, LinqToSql est une jolie fonctionnalité pauvre ORM et je ne le recommanderais pas pour la majorité des projets étant donné les alternatives supérieures qui sont librement disponibles. Il est également intéressant que vous recommandiez SQLMetal lorsque cela n'est pas strictement nécessaire. –

0

Linq2SQL ou subsonique les deux fonctionnent bien à cette fin. Edit: Linq2Sql est censé être "mort", mais il est encore assez utile dans sa forme actuelle. Je ne ferais aucun investissement à long terme.

+1

L'affirmation selon laquelle il est mort était correcte il y a environ 6 mois. Cependant, l'équipe qui travaille sur EF travaille également sur L2S et L2S aura de nombreuses nouvelles fonctionnalités ajoutées dans la version .NET 4.0. –

+0

@Andrew Avez-vous une source pour cette déclaration? –

+0

@ Michael http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40 –

1

Je ne suggère pas encore que vous utilisiez Entity Framework car il a encore beaucoup de bizarreries. Lorsque .NET 4.0 est officiellement publié, vous aurez alors Entity Framework 4.0. Avec cette version, j'abandonnerai probablement NHibernate et LINQ to SQL (les deux ont des rôles très différents) et j'utiliserai simplement EF car il a à la fois la facilité d'utilisation de LINQ to SQL et la flexibilité de NH. Pour l'instant, je suggère que vous utilisiez LINQ to SQL car il est très facile à démarrer et fonctionne la plupart du temps!

+0

Étant donné que le projet de rejet de ce projet est la fin du premier trimestre de 2010, et étant donné que ce sera un cadre pour une application assez large, proposez-vous que je prends une copie de bêta VS 2010 et NET Framework et utilise EF? – Nick

+0

NHibernate prend en charge Linq et a pour un certain temps. Chaque ORM a des "bizarreries". –

+1

@OP Étant donné que VS2010 est actuellement prévu pour une version de mars 2010 et que cette date peut glisser, je ne recommanderais pas de prendre cette dépendance. –

0

Un autre vote pour Entity Framework, bien que cela dépendra de la structure de la table sous-jacente, pas une procédure stockée. Je ne suis pas au courant d'un moyen de permettre à Entity Framework de déterminer la structure de classe en fonction de la sortie proc stockée.

J'ai déterminé que notre meilleure approche consiste à coder manuellement nos classes et les procédures stockées CRUD. Beaucoup vont argumenter avec cette solution, mais d'après mon expérience, l'utilisation d'un framework ORM a pour résultat un SQL moins qu'optimal qui est limité, surtout si l'on considère le pouvoir d'utiliser des procédures stockées que le framework va bloquer. Les clichés sont là pour une raison: si vous voulez que ce soit bien fait, faites-le vous-même. Plus vous introduisez de composants tiers dans votre application, plus vous avez de problèmes à résoudre qui ne sont pas sous votre contrôle direct. Je déteste m'abonner au syndrome des non-inventés-ici, mais c'est un cas où je crois que c'est valable.

+0

Quels ORM avez-vous essayés qui ne répondent pas à vos besoins? Entity Framework est peu connu pour sa capacité à générer du SQL performant. –

0

Cocher cette liste des plus célèbres ORM tools ".Net"

+0

Parmi ceux de la liste, lequel recommandez-vous? – Nick

+0

Je recommande, linqtosql, llbl, subsonique. –

Questions connexes