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 } }