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 <[email protected]> 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:
> [email protected]
> 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
> [email protected].
> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>
--
.-Salu2-.
--
--
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
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 [email protected].
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
}
}