Pergunta

Se eu tiver 10 chamadas de banco de dados na minha página web, e nenhum deles necessita de quaisquer transações etc. Eles são simplesmente obter dados do banco de dados (lê), deve ainda utilizar a unidade de classe trabalho?

É porque a criação de uma nova sessão por chamada de banco de dados é muito caro?

Foi útil?

Solução

Com NHibernate, a criação de fábrica de sessão é muito caro (para que você deseja armazenar em cache a fábrica de sessão uma vez que é criado, provavelmente na HttpApplication) mas a criação de sessão é muito barato. Em outras palavras, se ele mantém o seu código mais limpo, várias criações de sessão não é necessariamente uma coisa ruim. Eu acho que a documentação NH diz que é melhor:

Um ISessionFactory é um cara-a-criar, objeto threadsafe destina a ser compartilhada por todos threads da aplicação. Um ISession é um barato, objecto não-multitarefa que deve ser usado uma vez, por uma única processos de negócios, e depois descartado.

Assim, usando o padrão uow provavelmente não é mais eficiente, devido à sobrecarga extra, mas é uma boa prática e a sobrecarga é provavelmente não vai te machucar. otimização prematura e tudo isso.

Outras dicas

Sim, você deve usar uma transação. Do blog de Ayende:

"NHibernate assumir que todo o acesso ao banco de dados é feito em uma transação, e desencorajar fortemente qualquer uso da sessão sem uma transação."

Para obter mais detalhes, aqui está um link para sua postagem de blog:

http://ayende.com/Blog/archive/2008/12/28/nh-prof-alerts-use-of-implicit-transactions-is-discouraged.aspx

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