2009-08-27 3 views
1

Lors de la création d'un nouvel objet entité ayant une valeur de clé étrangère, je dois créer une nouvelle clé Entity Framework (Entity Framework dans .net 3.5) pour l'objet, mais je n'arrive pas à déterminer où.ASP.net MVC: Où dois-je créer/déclarer des clés d'entité dans mon design?

Maintenant, lorsque je crée un nouvel enregistrement avec une clé étrangère, je crée la clé d'entité dans le contrôleur (dans ce cas, un ID utilisateur tiré d'un fournisseur d'appartenance), l'attribuer à l'objet et le transmettre au référentiel couche de service.

Y a-t-il des problèmes avec cela, ou devrais-je transmettre l'objet plus l'ID utilisateur à la couche du référentiel et avoir trait à la création de la clé d'entité? Passer un objet semble plus propre, mais avoir plusieurs contrôleurs assignant des clés de cette façon me rend nerveux. Merci.

Répondre

4

Je pense que c'est une question de séparation des préoccupations. Un référentiel est concerné par la récupération et l'ajout/modification/suppression d'entités. Il ne devrait pas être responsable de la construction d'entités. Inversement, le contrôleur ne devrait pas non plus être responsable de la construction des entités (un contrôleur devrait avoir la quantité de travail nécessaire pour pousser les données vers une vue, et gérer les commandes d'une vue déléguer ces commandes à la logique métier ... la logique appartient ailleurs (comme un domaine).) En toute honnêteté, vous devriez créer un EntityBuilder de quelque sorte pour gérer le processus de création d'entités. Vous passeriez l'objet plus l'ID utilisateur à un constructeur, ce qui vous fournirait alors une entité entièrement construite qui pourrait ensuite être transmise à un référentiel.

EDIT:

Même avec votre changement de 'référentiel' à 'service de couche', le principal reste le même. Déléguez le processus de construction de votre entité à un constructeur dédié, et maintenez votre séparation des préoccupations.

+0

Votre réponse est très judicieuse. Je n'ai pas compris la question. –

+0

Je me suis trompé, cela devrait dire "couche de service" au lieu de "reposity" de votre poste, il semble que ce serait l'endroit idéal pour gérer la création de l'entité. –

+0

Cela a du sens, merci pour votre perspicacité. –

Questions connexes