2009-08-18 5 views
2

Ok, donc je commence juste à nhibernate (en utilisant couramment).Utilisation de nHibernate et du modèle de référentiel, besoin d'une direction

Une chose que j'aime à ce sujet est que je peux utiliser le modèle Repository (lire à ce sujet à partir du blog nhibernate rhino). Fondamentalement, en utilisant des génériques, je peux créer des méthodes qui fonctionneront sur TOUTES mes tables de base de données. J'ai ensuite hérité de la classe Repository et je peux ensuite ajouter des méthodes spécifiques à cette entité.

Lors de la tentative d'ajout d'une méthode Update, quelqu'un a mentionné que le modèle Repository est supposé agir sur les collections? Est-ce que je regarde mal les choses ici? Pourquoi ne puis-je pas créer une méthode de mise à jour?

J'ai essayé d'ajouter une méthode de mise à jour, mais je suis confus quant à la façon dont je vais gérer la session et mettre à jour la base de données?

Je veux un seul endroit pour tous mes accès de base de données pour chaque entité, de sorte que UserRepository aura tous CRUD de base et peut-être d'autres méthodes comme GetUserByEmail(), etc.

Répondre

2

Ne pas utiliser le modèle référentiel - utilisation le motif UnitOfWork à la place, et passe la requête définie ICriteria à l'ISession. Essentiellement, le modèle Repo encapsule quelque chose qui n'a pas besoin d'être enveloppé avec NH.

voir http://ayende.com/Blog/archive/2009/04/17/repository-is-the-new-singleton.aspx pour plus d'infos

+4

Je pense qu'il est trompeur d'insinuer que les motifs de l'unité de travail et du référentiel sont interchangeables car ils résolvent différents problèmes. Je suis familier avec cet article d'Ayende et même si je pense qu'il y a certainement une part de vérité, rappelez-vous s'il vous plaît que c'est juste une opinion, et ne devrait pas être présentée comme un fait. –

+0

ight, mais si vous apprenez NH, commencer avec le modèle Repository (avec rinçage sur chaque appel à repo.Update()) est une mauvaise habitude. Ou vous pouvez finir par écrire un hybride étrange de Repo et UoW qui ressemble à un Repo mais doit encore être vidé, ou passer à côté de la grandeur qui est le UOW déconnecté. Il me semble que Homestead a pris quelques tutoriels, fait ses premiers pas, et va un peu fausse route pour ce dont il a besoin, et quelle est la meilleure façon d'apprendre NH. – mcintyre321

+0

Mais oui, vous avez raison, je l'ai fait sonner comme une déclaration générale. Le modèle Repo est utile dans les bonnes circonstances. J'aurais dû dire "IMO dans ce cas, le modèle Repo est envelopper quelque chose ..." – mcintyre321

1

Peut-être mal entendu ou quelqu'un mispoke - le modèle du référentiel est censé exposer la collection comme le comportement, ne fonctionne pas sur les collections. Tout comme vous pouvez ajouter, supprimer et rechercher des éléments dans une collection, votre référentiel propose des opérations de sauvegarde, de suppression et de recherche qui fonctionnent avec votre base de données.

Je vous suggère de télécharger le code pour S#arp Architecture. Il inclut une implémentation de référentiel que vous pouvez réutiliser assez facilement. Si vous ne voulez pas prendre la dépendance, vous pouvez au moins passer du temps à étudier leur implémentation pour vous donner une meilleure idée de la façon de l'aborder vous-même.

+0

S # arp Architecture est maintenant sur http://wiki.sharparchitecture.net/ – cori

Questions connexes