0

Je suis nouveau à Entity Framework, j'ai lu le livre de Julie Lerman et beaucoup d'articles à ce sujet. Avoir un nouveau projet qui a déjà défini la base de données et les classes, donc décidé d'utiliser l'approche Code First (bien que ce soit le nouveau projet, la base de données et les classes sont assez similaires).Entity Framework 4.1 code d'abord où valider

Ainsi, nous avons: - couche de base de données avec des entités, la cartographie et DbContext - classes (couche métier) - WPF avec MVVM (Strate UI)

Si je comprends code d'abord correctement, les références de la couche de base de données d'affaires couche, l'interface utilisateur fait référence à la fois à la base de données et à la couche de gestion. (Si j'essaie d'ajouter dans la couche de gestion référence à la couche de base de données, j'obtiens une erreur de référence circulaire.)

Validation de base, comme champ obligatoire ou longueur Je comprends, mais où mettre des validations supplémentaires (plus complexes) si couche de gestion n'est pas au courant de la couche de base de données?

Merci, Claire

+0

Pourquoi DOE s votre couche de gestion de référence de couche de base de données? Cela ne semble pas correct. Quelles classes sont dans votre couche de gestion, car vos classes ViewModel ont normalement la logique métier en elles. – peter

Répondre

0

Jetez un oeil sur ce blog pour obtenir plus d'informations sur votre structure.

http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

Cela devrait aider.

Il y a quelques pièces plus sur le blog qui valent la peine de travailler à travers,

http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx

http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx

En général vous avez des options de mise en validation d'un certain nombre d'endroits. Vos modèles de vue est un endroit pour le faire. Lancez une exception ValidationException par exemple. Si vous utilisez des contrôles tiers tels que Telerik, ils détectent automatiquement et affichent un problème de validation.

+0

Bonjour Peter, mes collègues qui travaillent sur les modèles de vue insistent sur le fait que toute validation (sauf vérification de base, c'est-à-dire si rien n'est entré ...) devrait être faite en couche business – Claire

+0

J'ai regardé le blog de ScottGu, mais puisque je ne connais pas l'ASP ou MVC ne comprenait pas tout à fait la classe Controller et ce qui serait équivalent dans l'application WPF. – Claire

1

Vous pouvez effectuer des validations complexes dans vos classes d'entités en implémentant l'interface IValidatableObject. Ensuite, vous pouvez effectuer les validations à l'intérieur

EF 4.1 est conscient de cette interface. Il appelle donc cette méthode avant d'enregistrer les changements. S'il y a des erreurs de validation, il annulera la transaction.

2

La couche de base de données ne fait pas référence à la couche de gestion et la couche de présentation ne fait pas référence à la couche de base de données. Cela casserait la signification de l'architecture en couches. La superposition correcte est la suivante:

Database Layer -> Busienss Layer -> Presentation Layer 

Ce qui probablement vous confondre sont les entités. Dans une architecture simple, les entités sont partagées entre toutes les couches. Pour y parvenir, vous devez les placer dans un assemblage séparé utilisé par tous les calques.

La validation peut avoir lieu dans une couche:

  • couche de présentation peut valider l'entrée d'utilisateur - il peut utiliser des méthodes de couche métier pour que
  • couche d'affaires devrait appliquer des règles d'affaires, il peut aussi exposer les méthodes de interface utilisateur pour faire la validation des entrées utilisateur
  • couche de base de données peut valider si les entités sont conformes aux contraintes définies dans la base de données (par exemple des colonnes requises sont remplies)
+0

Merci Ladislav, Le référencement que vous avez mentionné a beaucoup plus de sens. Ce qui me déroute, c'est l'exemple de Julie Lerman dans Entity Framework book (chapitre 25 - Code utilisant d'abord CTP5). Il y a 3 projets: Classes (que je suppose est la logique métier); La persistance (que je suppose être les entités) - qui fait référence aux classes; Console - qui fait référence aux classes et à la persistance. En tant que premier projet de code, j'ai pensé que le référencement pourrait être différent pour le code d'abord. – Claire

+0

Je ne pense pas que les classes dans ce cas sont la logique métier - ce sont des entités. –

+0

À quoi je pensais? J'ai passé tellement de temps à lire sur le code d'abord pour confirmer ma (mauvaise) hypothèse basée sur cet exemple et essayer de le faire fonctionner. Grâce à toi, ma journée est réussie! Merci merci merci!! – Claire

Questions connexes