Pergunta

Sou novo no NHibernate (meu primeiro grande projeto com ele).
Eu estava usando um método simples de acesso a dados, criando o objeto ISession dentro de um bloco using para pegar meu objeto ou lista de objetos, e dessa forma a sessão foi destruída após sair do bloco de código.

No entanto, isso não funciona em uma situação em que o carregamento lento é necessário.
Por exemplo, se eu tiver um objeto Cliente que possui uma propriedade que é uma coleção de Pedidos, quando o carregamento lento é tentado, recebo uma exceção de Hibernate.
Alguém usando um método diferente?

Outras dicas

Confira a VerãoOfNHibernate webcasts para um ótimo tutorial...O que você procura especificamente não chega até o webisódio 5 ou 6.

Mantenha sua sessão aberta para toda a sua unidade de trabalho.Se a duração da sua sessão for muito curta, você não poderá se beneficiar do cache no nível da sessão (o que é significativo).Sempre que você puder evitar uma viagem de ida e volta ao banco de dados, economizará muito tempo.Você também não pode tirar proveito do carregamento lento, que é crucial para entender.

Se a vida útil da sua sessão for muito longa, você poderá encontrar outros problemas.

Se este for um aplicativo da web, você provavelmente se sairá bem com o padrão sessão por httpRequest.Basicamente, este é um HttpModule que abre a sessão no início da solicitação e libera/fecha no final.Certifique-se de armazenar a sessão em HttpContext.Items NÃO UMA VARIÁVEL ESTÁTICA.<--- leva a todos os tipos de problemas com os quais você não deseja lidar.

Você também pode olhar para RinoceronteCommons para implementação de uma unidade de trabalho.

Como você está desenvolvendo um aplicativo Web (presumivelmente com ASP.NET), confira Melhores práticas do NHibernate com ASP.NET no CodeProject.

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