Unidade de Trabalho é mais eficiente se eu não cuidar de transações, etc?
-
06-09-2019 - |
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?
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: