Muchas gracias por tus comentarios y apreciaciones José, estoy
revisando tus artículos y los ejemplos de uNhAddins para comprender
mejor CpBT


On 7 dic, 13:49, José F. Romaniello <[email protected]> wrote:
> Lo primero es recordarte que lo que has llamado BaseNegocio<T> parece un
> Dao<T>.. Responde a este patrón.
> Lo segundo es decirte que nhibernate tiene manejo contextuales de la
> sessión, por lo tanto lo que sabemos hacer es inyectar en el constructor del
> Dao, ISessionFactory. Recordar que la configuración, y el build de la
> session factory debería hacerse una sola vez al inicio.
>
> Al inyectar ISessionFactory se le puede pedir a este objeto
> GetCurrentSession(), y sobre esa sesión hacer las operaciónes que vos decís.
> De esta manera el dao queda agnostico a donde lo uses, y al manejo
> contextual que utilices.
>
> Para un proyecto web lo que todo el mundo usa es session-per-request, sobre
> lo cual te recomiendo mi 
> artículo:http://jfromaniello.blogspot.com/2009/11/como-usar-session-per-reques...
> <http://jfromaniello.blogspot.com/2009/11/como-usar-session-per-reques...>(son
> solo 100 páginas)
>
> Para un proyecto winforms, donde no hay capas distribuidas físicamente, lo
> que yo utilizó es la forma AOP de Conversation-per-business 
> transaction:http://fabiomaulo.blogspot.com/2009/01/aspect-conversation-per.html
>
> En unhaddins hay ejemplos de CpBT para winforms, wpf, asp.net mvc, asp.net,
> monorail etc.
>
> El 7 de diciembre de 2009 11:18, Argons <[email protected]> escribió:
>
>
>
>
>
> > Q tal, tengo una gran duda acerca del manejo de sesiones, soy nuevo
> > todavía en el uso de nhibernate, por lo tanto no estoy seguro bien
> > como realizar un manejo efectivo de las sesiones, la idea es esta:
> > estoy desarrollando una DAL sobre nhibernate, esta capa está pensada
> > en utilizarse tanto en proyectos win como web, otra de las
> > características de los proyectos a desarrollarse es que utilizarán el
> > patrón MVP, por lo tanto como será reutilizable tengo un manejador de
> > entidades genérico, de esta forma:
>
> > public abstract class BaseNegocio<T>
> >    {
> >        #region " Constructor "
>
> >        public BaseNegocio()
> >        { }
>
> >        #endregion
>
> >        #region " Métodos Publicos "
>
> >        public void Insertar(T entidad)
> >        {
> >            OperacionBaseDatos(entidad, OperacionesBD.Insertar);
> >        }
>
> >        public void Actualizar(T entidad)
> >        {
> >            OperacionBaseDatos(entidad, OperacionesBD.Actualizar);
> >        }
>
> >        public void Eliminar(T entidad)
> >        {
> >            OperacionBaseDatos(entidad, OperacionesBD.Eliminar);
> >        }
>
> >        public T Obtener(int id)
> >        {
> >            using (ISession session = SessionManager.AbrirSesion())
> >            {
> >                return session.Load<T>(id);
> >            }
> >        }
>
> >        #endregion
>
> >        #region " Métodos Privados "
>
> >        private void OperacionBaseDatos(object entidad, OperacionesBD
> > operacionesBD)
> >        {
> >            using (ISession session = SessionManager.AbrirSesion())
> >            {
> >                using (ITransaction transaccion =
> > session.BeginTransaction())
> >                {
> >                    switch (operacionesBD)
> >                    {
> >                        case OperacionesBD.Insertar:
> >                            session.Save(entidad);
> >                            break;
> >                        case OperacionesBD.Actualizar:
> >                            session.Update(entidad);
> >                            break;
> >                        case OperacionesBD.Eliminar:
> >                            session.Delete(entidad);
> >                            break;
> >                    }
> >                    transaccion.Commit();
> >                }
> >            }
> >        }
>
> >        #endregion
> >    }
>
> > En el método OperacionBaseDatos la primera línea lo único q hace es
> > crear una fábrica de sesiones, si es q no existe una ya creada, y
> > llama al método OpenSession de la fábrica. Como pueden ver estoy
> > utilizando microoperaciones lo cual me provocan algunos errores como
> > cuando trato de utilizar lazy loading.
> > La pregunta concreta es ¿Cómo puedo hacer para un correcto manejo de
> > sesiones para trabajar tanto en ambiente web como win?
>
> > Muchas gracias de antemano por los consejos y sugerencias.
> > Saludos.
>
> > Ariel Gonzales- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Responder a