2009-12-26 6 views
1

Je viens de commencer avec ASP.NET MVC 1.0. J'ai lu quelques tutoriels, mais je n'ai pas de bonnes idées sur la façon de construire mon modèle.Modèle pour ASP.NET MVC

J'ai expérimenté avec LINQ to SQL. Je ne peux pas dire que j'aime autant, mais je vais essayer. Je préfère utiliser SQL Stored Procedures, mais il ne semble pas fonctionner très bien avec les paramètres facultatifs dans mes procédures stockées.

Le projet est un prototype, mais je voudrais commencer par un bon design tout de suite.

La base de données contiendra probablement environ 50 tables et les procédures stockées seront utilisées pour toutes les requêtes et mises à jour. Certaines procédures renverront également plusieurs résultats. Comment serait le meilleur moyen de concevoir ce modèle?

Toutes les idées sont les bienvenues. Dois-je même utiliser LINQ to SQL? Dois-je concevoir mes procédures stockées pour ne renvoyer qu'un seul résultat? Je me sens un peu perdu.

Répondre

3

Vous pouvez utiliser des procédures stockées avec LINQ. Vous avez simplement besoin de remplacer les instructions autogénérées sur vos entités avec vos procs stockés. Regardez les propriétés de l'entité (table) dans le concepteur pour les modifier. Vos procédures stockées ne seront pas en mesure de renvoyer plusieurs résultats car elles doivent être mappées sur une collection de l'une de vos entités ou d'une entité générée automatiquement, c'est-à-dire sur une collection d'une seule classe.

Ayant dit tout cela, je voudrais l'essayer sans utiliser de procédures stockées. Le code LINQ est entièrement paramétré donc vous avez déjà cet avantage. Vous constaterez que LINQ vous permet de créer facilement des requêtes allégeant votre besoin de paramètres optionnels dans vos processus stockés et, probablement, d'aboutir à des requêtes plus efficaces car vous n'avez pas besoin de construire une logique supplémentaire dans votre requête pour gérer l'option paramètres. Une fois que vous commencez à utiliser LINQ, je pense que vous constaterez que la puissance et l'expressivité du code vous feront oublier vos procédures stockées.

Vous pouvez toujours avoir besoin de procs ou de fonctions de table stockées pour des requêtes complexes - c'est correct. Si elles sont mappées sur une entité existante, vous pouvez simplement faire glisser la proc/fonction sur l'entité dans le concepteur et vous obtenez une méthode agréable sur votre contexte de données qui exécute votre SQL et retourne des collections de cette entité. Si ce n'est pas le cas, je crée souvent une vue pour le schéma proc/function, l'utilise en tant qu'entité et lui attache la proc/fonction. Puis-je vous demander pourquoi vous avez besoin d'utiliser des procédures stockées pour ce projet?

0

Ils n'ont presque aucune valeur aujourd'hui si vous travaillez avec une base de données moderne. Le SQL paramétré utilisant un bon ORM vous donnera les mêmes plans d'exécution mis en cache et les mêmes avantages de sécurité que vous recherchez avec les procédures stockées.

Je recommanderais parce que c'est une bien meilleure façon de parvenir à l'ignorance de la persistance. Et à mon humble avis, c'est l'objectif de quiconque conçoit un modèle. Vous devriez penser d'abord à l'objet au lieu des données d'abord.

La meilleure ressource est autour d'une série screencast par Steve Bohlen « The summer of nhibernate »

également LINQ to NHibernate est disponible et fonctionne très bien pour toute requête dynamique que vous pourriez avoir besoin d'écrire. La seule douleur que vous remarquerez avec NHibernate est le XML, mais si vous aimez vraiment l'ORM, vous pouvez écrire une interface fluide à la place en utilisant FNH.

J'ai trouvé que NHibernate était le meilleur outil pour modéliser un domaine car vos objets sont 100% sans infrastructure et cela vous permet de faire tout ce que vous voulez sans avoir à vous soucier de la base de données. Aussi, si vous êtes dans les tests unitaires de quelque nature que cela rendra votre vie beaucoup plus facile: P

Modifier

Une partie de la raison pour laquelle je répondu à votre question est que j'ai construit beaucoup un système utilisant des procédures stockées et trouvé à regretter cette décision plus tard. Mais dans ma situation j'avais une exigence par un dba afin que je ne pouvais pas m'éloigner de la norme.

Si vous êtes déjà en train de regarder LINQ to SQL, je vous encourage simplement à regarder NHibernate comme une autre bonne option pour atteindre l'objectif de l'ignorance de la persistance. Quand j'ai évité de penser aux données du problème, cela m'a permis de travailler à un niveau beaucoup plus élevé et de profiter de la plate-forme .net pour résoudre les problèmes. TSQL a sa place mais si vous écrivez une application et que vous voulez la conserver, essayez de penser à la manière dont les objets de votre domaine fonctionneront ensemble en mémoire en premier.

Edit 2

Je ne sais pas pourquoi je suis un vote vers le bas pour suggérer NHibernate -. Après tout, vous dit que vous étiez ouvert à autre chose que L2S

« Tous et toutes les idées sont les bienvenues Si J'utilise même LINQ to SQL? Devrais-je concevoir mes procédures stockées pour ne renvoyer qu'un résultat? Je me sens un peu perdu. "

Le point de ma réponse était juste cela - pour fournir une « bienvenue » idée ...

+1

Personnellement, je trouve NHibernate maintenant beaucoup moins convaincant qui existe LINQ. LINQ-to-SQL peut être un excellent ORM pour beaucoup de gens – ryber

+0

Bien sûr, mais vous pouvez faire exactement la même chose maintenant que NHibernate a un fournisseur LINQ avec l'avantage supplémentaire que vous pouvez travailler avec des mappages plus complexes. Par exemple: si vous avez des données parent dans une table séparée de l'enfant, nhibernate est cool avec ça. Mais avec LINQ to SQL, vous devez avoir tout dans une table. Donc, pour des situations comme celle-ci où vous avez besoin de plus de flexibilité ou si vous savez que la complexité du modèle (ou de la base de données) est grande - IMHO NHibernate est le meilleur outil pour le travail. –

+0

C'est utile seulement si c'est utile pour vous. Si vous n'avez jamais besoin de ces fonctionnalités avancées, alors c'est juste une autre bibliothèque que vous devez suivre. Je ne l'ajouterais probablement jamais à un projet avant qu'il ne soit évident que ce serait utile. Notez que je ressens la même chose à propos des bases de données. Je pense que pour de nombreux projets .net d'entreprise (la plupart du temps des CMS et des outils de processus améliorés), c'est probablement exagéré. Je ne dis pas que c'est mauvais ou quoi que ce soit, c'est juste que LINQ est déjà là et bien documenté et bien supporté sur les blogs et SO. Donc, si un débutant m'a demandé avec lequel aller, je dirais probablement LINQ – ryber