NHibernate: como duplicar um registro

Publicado por Marcos Dell Antonio em 03/02/2007 | .NET

Nesta semana que passou perdi algumas horas para descobrir como duplicar um registro utilizando o NHibernate.

Basicamente eu precisava adicionar ao cadastro de Tarefas a função de duplicar uma determinada tarefa.

Existem duas maneiras para fazer isso usando o NHibernate:

  1. Carregar um objeto Tarefa da base, criar um novo objeto Tarefa, popular ele com as informações do objeto carregado, gerar uma nova ID e persistí-lo. Algo mais ou menos assim:

    1 Tarefa t1 = TarefaDAL.Get(1); 2 Tarefa t2 = new Tarefa(); 3 t2.Id = TarefaDAL.GetNextId(); 4 t2.Descricao = t1.Descricao; 5 TarefaDAL.Save(t1);

    Ok, simples de ser feito quando o objeto tem poucas propriedades e é 100% certo que nunca será adicionada ou removida uma outra (isso é improvável em 99% dos casos).

  2. Carregar um objeto Tarefa da base, desvincular ele da Session, gerar um novo ID e salvá-lo.
    1 Tarefa t = TarefaDAL.Get(1); 2 Session.Evict(t); 3 t.Id = TarefaDAL.GetNextId(); 4 TarefaDAL.Save(t);

    Muito mais simples que a primeira versão e sem dúvida alguma muito mais prático também, pois esta rotina nunca irá mudar independente de quantas propriedades a classe Tarefa tiver.

  3. O método Evict da ISession remove uma determinada instância do cache da session. Se o código acima for executado sem a chamada deste método, ao executar o Save(t), nenhuma alteração será feita no registro que está na base.

Fica aí a dica então: quando precisar duplicar um objeto, use o Evict para desvinculá-lo da sessão e após isso fazer o INSERT.

Até +!

Deixe o seu comentário

Anúncios

Anúncio provido pelo BuscaPé