Pergunta

Novo para NHibernate (meu negação). Me deparei com um semelhante e interessante sobre MVC , no entanto, I 'm mais curioso sobre o que as melhores práticas gerais são para gerenciar sessões NHibernate em um aplicativo web genérico.

Eu me deparei com a Burrow projeto, mas eu estou começando a perceber, parece haver algumas direções diferentes para tomar. Estou ciente de que provavelmente não é do meu interesse para criar uma nova SessionFactory cada necessidade vez que eu para tocar o banco de dados, por isso estou interessado no que a comunidade faz para gerenciar sessões. Você usa Burrow? Você envolver sua SessionFactory em um singleton?

Qualquer direção ou visão é sempre muito apreciada.

Foi útil?

Solução

Para responder à sua pergunta diretamente, o seu objeto ISessionFactory deve ser um singleton. Você pode fazer isso por meio de programação (ou seja, por envolvê-lo em um C # Singleton) ou configurando-o em seu contêiner IoC.

Como para as sessões, Burrow parece boa, mas o prodominant e padrão simples para sessões em aplicações web - OpenSessionInView - vem out-of-the-box com NHibernate 2.0.0. Ou seja, as chamadas de código de acesso a dados ISessionFactory.GetCurrentSession() em vez de ISessionFactory.OpenSession(). Você, então, estado como da fábrica sessão atual é gerido por especificando uma implementação de ICurrentSessionContext. NHibernate fornece dois mais out-of-the box para alligning a sessão com o pedido web. Isto é conhecido como 'Contextual Sessions' na documentação.

Sem dúvida, uma aplicação web mais complexo pode exigir mais tempo conversas com carregamento lento complexo etc. duradoura, mas para uma aplicação web padrão NHibernate sessões contextuais deve bastar.

Outras dicas

Eu escrevi uma série de posts sobre este tema em relação com os padrões NHibernate / Fluente Acesso NHibernate de dados.

O primeiro que eu recomendo é abstrair a interação do NHibernate.

Criando um comum genérica e extensível NHiberate Repository

Em seguida, para lidar com o gerenciamento de sessão Implementei o padrão "Sessão per conversação do negócio", que em vez de ter uma exist sessão NH para a vida de uma única solicitação de página que é comum que existe para uma série de eventos dizer uma página que permite que você faça um monte de edições a um formulário e, em seguida, no final, quer aplicá-las todas de forma permanente ou cancelá-las.

Conversação Per Transação de negócios usando PostSharp e IoC

Se eu estava indo para escrever este post de hoje, eu não iria usar PostSharp novamente para lidar com a AOP (Aspect programação orientada) de código no meu projeto eu tinha tanto para uso Linfu.AOP ou outra estrutura para fazer a interação AOP.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top