2009-10-26 4 views

Répondre

2

Vous ne pouvez pas. La session est utilisée pour maintenir une connexion à la base de données. Après avoir fermé la session, vous ne pouvez pas accéder à la base de données

+0

Mais je veux utiliser l'objet IQueryable, en dehors Nhibernate Couche DataAccess. – NetSide

+0

Vous pouvez renvoyer ToList depuis votre couche DataAccess. Ou vous ne fermez pas la session et la transaction. –

+0

Si vous travaillez sur un projet web, vous pouvez utiliser la stratégie session par requrest. Que se passe-t-il si nous ne fermons pas la session? http://frickinsweet.com/ryanlanciaux.com/post/NHibernate-Session-Per-Request.aspx – Sly

1

Il semble que vous vous y prenez de la mauvaise façon. Vous devez utiliser le motif UnitOfWork. À l'intérieur vous êtes l'unité de travail où vous faites des choses avec votre IQueriable. Vous ne pouvez pas simplement passer un IQueriable en raison de sa dépendance à une ISession. Peut-être votre syntaxe ressemblera à ceci:

public void DoSomethingWithData() 
{ 
    IList<Bundles> qbundles; 
    using (var uof = new UnitOfWork()) 
    { 
     IQueriable<Bundle> bundles = uof.Repository<Bundle>().Query(); 
     // just a litte example... replace with whatever 
     qbundles = bundles.Where(b => b.Qty == 5).ToList() 
    } 
    .... 
} 

Voici quelques liens qui pourraient vous aider à démarrer avec ce modèle:

http://web.archive.org/web/20090803155753/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/10/nhibernate-and-the-unit-of-work-pattern.aspx

http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx

Questions connexes