41 votes

Modèle EF Premier ou Première Approche de Code?

Je sais que cette question a été posée de nombreuses fois avant que je n'ai lu quelques posts sur le sujet sur les avantages et les inconvénients, etc, mais je n'arrive toujours pas à décider ce qui est une bonne solution pour moi. Je suis très nouveau à la programmation web et viennent de un SQL DB Admin / rédaction d'un rapport de fond. J'ai décidé d'essayer de construire mon propre site web, qui peut-être 30 à 40 tables peut-être plus dans le futur.

J'ai regardé les deux approches et je n'ai faveur de l'Entité de Modèle de l'approche uniquement parce que j'aime la simplicité de la designer et j'aime voir le modèle dans son ensemble en face de moi, elle montre le tableau d'ensemble dans un instantané. Aussi, ne m'étant un excellent programmeur, je suis impressionné par la façon dont il produit le POCO à l'aide de la DbContext modèle de générateur et la liaison entre les classes.

Cependant, j'aime bien le Modèle de la Première Approche, je crois qu'il y a certains inconvénients, je ne sais pas si ils sont réels inconvénients ou je ne sais pas assez sur le premier modèle de l'approche et de l'approche du premier code que je suis encore très nouveau pour cette.

Les Raisons que j'hésite à utiliser le Modèle de la Première approche sont:

-Principalement parce que j'ai du mal à trouver des tutoriaux sur le Modèle de la première approche à l'aide de MVC 3. Le meilleur tutoriel que j'ai trouvé à l'aide de la DbContext est par Julie Lerman, mais elle ne couvre pas copain classes qui sont importantes pour l'utilisation de données d'annotations et de faire d'autres changements qui ne sont pas perdus lorsque vous régénérer les POCOs . La plupart des tutoriels MVC 3 semblent liées à l'utilisation du Code à la première approche. La plupart des gens disent que c'est parce que le tuteur ne veux pas me concentrer sur EF, mais plutôt de montrer plus MVC dans les tutoriaux. Personnellement, je pense que c'est parce que Microsoft est le champion de la Premier Code de la méthodologie sur les autres :)

-Si c'est une bonne pratique pour créer copain classes pourquoi ne puis-je pas trouver de nombreux tutoriels montrant ce pour MVC 3? Sont Copain Classes un autre nom pour Afficher les Modèles? Et pourquoi ne puis-je pas trouver tout les tutoriels par Microsoft montrant ces copain/modèles de vue de l'utilisation avec MVC 3?

-J'ai essayé de faire une base de 1 pour 1 relation entre les 2 tables. Dans le modèle, vous devez d'abord définir les clés de l'identité de chaque table pour le même champ, plutôt que d'utiliser un FK dans l'une des tables, ce qui peut avoir un peu déroutant lorsque vous avez 3 ou plusieurs tables liées par une relation de 1 à 1 les relations. Dans le premier code, une façon de contourner ce problème est d'utiliser le modèle du générateur et de le configurer manuellement. Je pense que dans MF vous pouvez modifier la relation en allant dans le XML dont je ne suis pas désireux de le faire à tous.

-Plus de soutien/aide sur le premier code de problèmes

Les raisons pour lesquelles j'hésite à utiliser l'approche du Premier Code sont:

-Je suis un novice codeur.

-Je vois, il est très difficile de garder une trace des tables et des relations que le projet se développe.

-Il n'y a pas de diagramme de Modèle et je dois dire que j'aime vraiment cette idée.

-La cartographie des entités de la base de données via la configuration des classes je trouve impossible :).

-Mise à jour d'une table nécessitent une modification du code et de la DB. Dans le premier Modèle uniquement un changement de modèle qui mettra automatiquement à jour la base de données et de Code après avoir dit que si vous êtes en utilisant un copain de classes, vous devrez mettre à jour ces derniers aussi bien.

Aussi maintenant je vois des gens qui sont un peu en combinant le Premier Code de Base de données et premières approches, en ce que vous ne laissez pas le Premier Code de générer votre base de données, mais de créer manuellement une base de données et utiliser le premier code de l'API à EF pour l'obtenir.

Ma tête tourne, avec toutes les options et les inconvénients et les avantages et les inconvénients. Je veux juste passer avec la création de mon site et à ne pas réfléchir sur l'approche à prendre. Quelqu'un peut-il me donner quelques précisions sur l'approche qu'ils pensent est le meilleur basé sur ce que j'ai dit et/ou ce qu'ils pensent être plus flux principal dans l'avenir?

Merci beaucoup dave

37voto

Ladislav Mrnka Points 218632

C'est trop long question. Vous devez rompre votre problème en plusieurs questions distinctes prochaine fois.

Code-premier Modèle x-x de la Base de données-première

Vous êtes d'une base de données mec, donc la meilleure approche pour vous est une base de données incrémentielle-première approche qui permet de définir les choses en DB (ou VS outils de Base de données) et de mettre à jour votre modèle à partir de la base de données. Cela vous donnera un grand contrôle de votre base de données et vous permettent la conception de l'application et la base de données de manière incrémentale. Pourquoi je pense que vous l'aimerez:

  • Vous n'avez SQL DB Admin avant de vous le savez probablement quelque chose à propos de DB et de la façon de les concevoir pour une performance - EF ne fera rien pour vous. EF va pas créer des index pour vous etc.
  • 30-40 tables signifie que vous ne serez pas construire le modèle en une seule séance. Vous allez commencer avec le petit modèle et continu de grandir. Une fois que vous commencez à faire des changements dans la bd ou l'ajout de données d'initialisation, vous ne voulez pas perdre ces changements et les données. Code-première permet uniquement de supprimer l'ensemble de la base de données et de le recréer à partir de zéro. Modèle-première de permettre la construction de la DB progressivement, mais vous avez besoin d' Entité Concepteur de Base de données de Génération de bloc d'Alimentation et VS 2010 Premium ou Ultimate ($5.000-$10.000).

Plus sur les différences entre les bases de données tout d'abord, le premier Modèle et le premier Code. Une autre réponse décrit les différences entre le code-première et de travail avec le designer.

DbContext + API de Base de données-première + Couramment cartographie

Je dirais que c'est le plus dur chemin à parcourir. Vous allez définir la première base de données et vous permettra d'utiliser DbContext API fluent ou d'annotations de données pour définir la cartographie. Cela exige une bonne compréhension de l'EF, et tous les principes derrière la cartographie + compréhension de défaut de convention utilisée dans l'API DbContext. Il vous donnera de nice et de contrôle explicite sur la cartographie, mais il est le plus de travail à faire. Il est certainement le plus dur chemin à parcourir. Aussi il n'est pas censé utilisation parce que DbContext API a été principalement créé pour le code-première approche.

API DbContext x API ObjectContext

Une fois que vous commencez à utiliser EDMX (entité designer), vous avez le choix d'utiliser soit DbContext Générateur de modèle T4 ou POCO Générateur de modèle T4. La décision est à vous - vous pouvez utiliser l'API DbContext (premier modèle) ou de l'API ObjectContext (deuxième modèle) qui est beaucoup mieux documenté et vous pouvez également utiliser deux grands livres:

Tout ce que je sais à propos de ObjectContext API est à partir de ces livres, des auteurs de blogs et de pratique + Réflecteur.

DbContext API n'ont pas n'importe quel livre. Vous pouvez vérifier certains grands sites pour obtenir des informations à ce sujet:

Tout ce que je sais à propos de l'API DbContext est à partir de ces blogs et pratique + Réflecteur.

Même si vous utilisez le premier code, vous pouvez toujours utiliser diagramme de classe pour visualiser votre diagramme de classe (il n'est pas le même que EDMX, mais il est suffisant pour obtenir la grande image).

La recherche sur un Débordement de Pile ou forum MSDN sera vous donner des réponses sur la plupart des problèmes que vous aurez avec les deux Api.

MVC 3

Il n'y a rien de spécifique à l'aide de entity framework avec MVC 3. Copain des classes pour la validation des données annotations sont considéré comme une mauvaise pratique. Un copain de classe est séparée de la classe utilisée comme un métadonnées titulaire appliquée sur l'entité. Un modèle de vue est la classe utilisée pour le transfert de données entre le contrôleur et la vue. Modèle de vue doivent être spécifiques à chaque vue avec sa propre validation des annotations parce que vous avez généralement besoin de validations différentes dans les différents écrans de votre application lorsque vous travaillez avec le même type d'entité - par exemple éditer et insérer l'écran peut avoir différentes exigences en matière de validation.

Malgré le fait qu'il n'est pas considéré comme une bonne pratique, l'ajout d'une validation à des entités est possible - vous pouvez soit créer copain de classe pour chaque votre entité manuellement ou vous pouvez essayer de modifier le modèle T4 de générer des annotations pour vous directement (bien que c'est dur).

One-to-One relation

Oui EF nécessite la création d'un-à-un regard uniquement sur le haut de clés primaires. La raison en est que les EF ne prend pas en charge les clés uniques / limites. Il n'y a pas moyen de contourner cela, et à l'aide de clés uniques dans la base de données à ne pas les modifier.

8voto

Erik Funkenbusch Points 53436

C'est relativement simple. Si vous n'avez pas de soins sur le modèle de base de données, utiliser le premier code. Si vous le faites, l'utilisation du Modèle en premier (ou la Première Base de données). Tout dépend de l'endroit où votre attention se concentre, centré sur les données ou le code centrique.

3voto

Damb Points 6587

J'ai regardé les deux approches et je favorables Modèle d'Entité approche uniquement parce que j'aime la simplicité de la concepteur et j'aime voir l'ensemble de la modèle en face de moi, il montre l' tableau d'ensemble dans un instantané. Aussi, moi il n'était pas bon programmeur, je suis impressionné par la façon dont il produit le POCO à l'aide de la DbContext modèle de générateur et la la liaison entre les classes.

+

La cartographie des entités de la base de données via configuration des classes je trouve impossible :).

= utiliser le premier modèle

Si c'est une bonne pratique pour créer copain les classes de pourquoi ne puis-je pas trouver de nombreux tutoriels montrant ce pour MVC 3? Sont Copain des Classes d'un autre nom pour la Vue Modèles? Et pourquoi ne puis-je pas trouver tout tutoriels par Microsoft montrant ces copain/modèles de vue de l'utilisation avec MVC 3?

Ce pourrait être parce que le code-first est quelque chose comme un petit nouveau dans le bloc. C'est pourquoi il y a surtout des code-premier tutoriel pour MVC3. Modèle premier est 'beaucoup' plus et a été probablement le plus favourited solution en temps de MVC2.

Btw: Vous connaissez déjà mon oppinion, que vous devez utiliser, ce que vous aimez le mieux ou le plus confortable (comme je vous l'ai dit la dernière fois où vous avez demandé à ce sujet), mais je voulais juste ajouter quelque chose ici :)

Edit après les commentaires:

Jetez un oeil à ces choses, qui vous aidera avec le premier code, beaucoup de l'omi:

La création d'un Modèle de Données Entity Framework pour une ASP.NET Application MVC (1 de 10) Échafaudage de votre ASP.NET MVC 3 projet avec la MvcScaffolding paquet

++ ces vidéos de MIX11 à channel 9:
Scott, Hanselman de montrer de nouvelles choses dans sa manière impressionnante, comme d'habitude
Steve Sanderson montrant la puissance de MvcScaffolding

0voto

Gregory A Beamer Points 10975

Vous pouvez utiliser le modèle de premiers exemples à partir de n'importe quelle version de la MVC, si c'est votre principal problème avec le premier modèle. La façon MVC poignées "modèles" n'est pas vraiment différent entre les versions. Bien sûr, il y a des améliorations à la vue du modèle, etc., mais vous devriez être bien avec les anciens tutoriels.

Je préfère le premier code, car j'ai l'impression il y a des modèles de base de données et les modèles de domaine et qu'ils servent à des fins différentes. Base de données de l'organisation est de taille et les performances sur la base de données et non pas à l'aide de votre application. Avoir votre propre modèle vous permet de vous concentrer sur les besoins de l'état dans votre application, quelle que soit la base de données.

Maintenant, vous pouvez accéder à ce modèle dans le premier modèle, mais vous êtes plus susceptibles de penser à propos de la base de données de vos besoins de cette manière ... esp. si vous êtes un débutant à ce.

Juste mes 2 cents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X