2009-11-29 6 views
1

J'ai utilisé le framework ncommon (http://code.google.com/p/ncommon/) avec nhibernate et asp.net mvc. J'aime vraiment la mise en œuvre du modèle d'unité de travail, mais j'ai des problèmes de chargement paresseux dans mes vues. Je cherche comment mettre en œuvre la session par motif de demande avec ncommon ou regarder un autre cadre qui soutiendra:unité de travail et de session par demande dans nhibernate et asp.net mvc

  1. LINQ to NHibernate
  2. unité
  3. de modèle de travail
  4. session par motif de demande pour soutenir le chargement paresseux vues

Tout conseil grandement apprécié.

Répondre

2

Jetez un oeil à SharpArchitecture.net pour un excellent framework basé sur NHibernate pour MVC qui, je crois, correspondra à vos spécifications.

+0

Merci Michael. Je connais le framework sharparchitecture, mais trouve ça comme utiliser une bombe atomique pour tuer une souris ;-) Si je me souviens de l'architecture pointue n'utilise pas le fournisseur linq – Chev

+0

Ha. Vous avez probablement raison à propos de la bombe atomique! L'arche tranchante a le fournisseur de linq nhibernate cependant. –

+0

Au cœur de la question, on dirait que vous fermez votre session à bientôt. Avec la technique session-per-request vous ouvrez la session dans le contexte de HttpApplication dans Application_BeginRequest et la fermez dans Application_EndRequest. Vous pouvez le faire dans Global.asax. Le code source Sharp Architectures pourrait vous donner quelques idées sur la façon de le faire :-) –

2

Tout d'abord, si vous utilisez vos entités dans votre modèle de vue, vous vous trompez. Je suis désolé de vous l'expliquer mais vous ne pouvez pas vraiment utiliser votre modèle de base de données dans vos vues. Si j'ai par exemple une entité Compétition dans la base de données, je pourrais finir avec 3-4 CompetitionView en fonction de ce dont j'ai besoin. Fondamentalement, je charge tout ce dont j'ai besoin avec impatience et envoie juste ce qui est nécessaire pour cette vue spécifique. Au début, cela m'a semblé plus de travail que d'essayer de le résoudre avec NHibernate, mais à la fin, j'ai constaté que je gagnais énormément de temps à le faire tout de suite. Il existe également un projet open source appelé AutoMapper qui permet de transférer des données entre les différentes entités de vos différents modèles.

Espérons que cela aide et que vous ne désespérez pas de la meilleure pratique!

+0

Merci pour la réponse. J'utilise des entités de domaine dans mes vues. Je ne suis pas sûr de comprendre cette déclaration sur le modèle de base de données dans mes opinions. Comme la question l'indique, j'ai besoin d'une charge paresseuse dans mes vues et je ne veux pas charger avec empressement. Il y a une raison pour laquelle les ORM ont cette fonctionnalité. En chargeant certains de mes arbres, cela provoquerait une baisse des performances et enverrait beaucoup de données inutiles au client. – Chev

+0

"Vous ne pouvez pas vraiment utiliser votre modèle de base de données dans vos vues" - C'est un peu large. Si vous utilisez un seul objet ou un sous-ensemble d'un objet, il n'est pas nécessaire de créer un modèle de vue. Je suis d'accord qu'une vue complexe qui a plusieurs classes distinctes d'objets ou de formes avec des listes déroulantes etc. qui doivent être peuplées puis créer absolument des modèles de vue. –

Questions connexes