Hola Edgar,

Yo personalmente implementé para web api un action filter teniendo así un
contexto de NHibernatePerAction pero para WebApi.
Adjunto la clase del action filter.

El 26 de enero de 2015, 17:50, Edgar Ramos <eramose...@gmail.com> escribió:

> Gente algun buen link de referencia para manejar la session de nh en una
> app asp net web api 2
>
> Muchas gracias
>
> --
> Saludos
> Edgar
>
> --
> --
> Para escribir al Grupo, hágalo a esta dirección:
> NHibernate-Hispano@googlegroups.com
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> ---
> Has recibido este mensaje porque estás suscrito al grupo
> "NHibernate-Hispano" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a
> nhibernate-hispano+unsubscr...@googlegroups.com.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>



-- 
.-Salu2-.

-- 
-- 
Para escribir al Grupo, hágalo a esta dirección: 
NHibernate-Hispano@googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
--- 
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" 
de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía 
un correo electrónico a nhibernate-hispano+unsubscr...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Context;
using NHibernate.Tool.hbm2ddl;
using core.Extensions;
using System.Web.Http.Filters;
using System.Web.Http.Controllers;

namespace Controllers.ActionFilters
{
    public class NHibernateSessionPerAction : ActionFilterAttribute
    {
        private static readonly ISessionFactory sessionFactory;

        static NHibernateSessionPerAction()
        {
            sessionFactory = CreateSessionFactory();
        }

        public static ISession GetCurrentSession()
        {
            return sessionFactory.GetCurrentSession();
        }

        public override void OnActionExecuting(HttpActionContext filterContext)
        {
            ISession session = sessionFactory.OpenSession();
            session.BeginTransaction();
            CurrentSessionContext.Bind(session);
        }

        public override void OnActionExecuted(HttpActionExecutedContext 
filterContext)
        {
            if (CurrentSessionContext.HasBind(sessionFactory))
            {
                ISession session = CurrentSessionContext.Unbind(sessionFactory);

                if (session == null) return;

                try
                {
                    session.Transaction.Commit();
                }
                catch (Exception ex)
                {
                    session.Transaction.Rollback();
                    ex.ErrorLog();
                }
                finally
                {
                    session.Close();
                    session.Dispose();
                }
            }
        }

        #region DB Configuration
        private static ISessionFactory CreateSessionFactory()
        {
            return Fluently.Configure()
                .Database(CreateMySQLDbConfig)
                .Mappings(m => 
m.FluentMappings.AddFromAssemblyOf<data.Mappings.UserMap>())
                .ExposeConfiguration(UpdateSchema)
                .CurrentSessionContext<WebSessionContext>()
                .BuildSessionFactory();
        }

        #region DBMS Config
        private static MsSqlConfiguration CreateMSSQLDbConfig()
        {
            return MsSqlConfiguration
                .MsSql2008
                .ConnectionString(c => 
c.FromConnectionStringWithKey("ConnectionString"));
        }

        private static MySQLConfiguration CreateMySQLDbConfig()
        {
            return MySQLConfiguration
                .Standard
                .ConnectionString(c => 
c.FromConnectionStringWithKey("ConnectionString"));
        }
        
        #endregion

        private static void UpdateSchema(Configuration cfg)
        {
            new SchemaUpdate(cfg)
                .Execute(false, true);
        }

        #endregion
    }
}

Responder a