PERSISTIR DADOS VIA METODO

LUISCAMPANA12 25/09/2013 11:53:41
#429252
bom dia a todos ,

pessoal estou com a seguinte duvida ,

eis que fiz uma tela para cadastro de pedidos , ok .!! tendo feito isso existem os itens do pedido , que sao inserido após a insercao do pedido.ok eis meu problema.

1º tabela tb_pedidos
2º tabela tb_item_pedido

apos a validação dos campos.. no aspx eu chamo a DAO Pedidos e faço o comando insert.

Ex.: ped.Insert(pedido)

depois disso eu faço a validação dos itens do pedido estando todos validados eu chamo a DAO de Itens do pedido e faço a insercao.

Ex.: pi.Insert(item_pedido);

eu coloquei essa instrução dentro de ifs e try catch para diminuir ao maximo a possibilidade de erros na inserção dos itens , porém gostaria de criar ou um método para controlar a transação de quando ele der erro ao inserir os itens eu fazer um roolback e retirar o registro da tabela de pedidos, nao sei como faz.

eu sei realizar a transação dentro da própria DAO porém essa transação soh vai ser feita enquanto eu estiver naquela DAO, eu quero fazer essa transação durar até a inserção dos itens do pedido

MADMAX 25/09/2013 12:08:43
#429254
LUISCAMPANA12 nada impede de você fazer a transação do primeiro insert ai so realizar o comitt quando o insert de itens der certo e em casso de erro no catch você pode dar roll back na transação inicial. O que você pode fazer e usar a mesma conexao para as duas rotinas assim você pode dar roll back para a transação a qq momento;
LUISCAMPANA12 25/09/2013 12:14:57
#429255
entao oq eu quero fazer eh exatamente isso .. só que .!!

como eu uso a mesma conexao sendo q elas estao em DAO[ô]s diferentes é possivel ?
se sim vc pode me dar uma força ?
MADMAX 25/09/2013 12:28:56
#429257
Não sei como você fez mais e possivel pois verifique se vc tem a opção BeginTransaction diponivel e depois no fim se tudo der certo vc usa o commit ou o rollback ..

Aqui tem um exemplo de uso ... creio que como os DAOs usam a mesma conexão no rollback ele desfaz tudo que usou aquela conexão idependente do DAO usado

Olha um exemplo de uso legal

http://www.macoratti.net/vbn5_trt.htm
LUISCAMPANA12 25/09/2013 13:22:45
#429264
então eu encontrei esse exemplo na net .!

mais o problema é que neste exemplo ele faz todo o uso na própria DAO, o que acontece é que em cada dao ele faz a conexão e dps fecha e retorna o valor .!

no caso aqui são duas DAOS e oq eu consigo fazer seguindo este exemplo é inserindo cada transaction em cada dao .. sendo que na vdd oq eu estou buscando eh ele aguardar uma enquanto executa a outra.! =/





KERPLUNK 25/09/2013 14:32:51
#429269
Resposta escolhida
O que eu faria:
Um DAO específico que recebe a entidade pai(contendo uma propriedade List<T> para todos os filhos) e seguir esse fluxo nela:
- Abre conexão
- Inicia transação
- Inicia tratamento de exceções(try...catch)
- Insere pai
- Insere filhos
- Trata exceção e faz rollback quando necessário
- Comitt transação
- Fecha conexão

Se você não puder fazer nesses moldes, você vai ter que acrescentar em cada uma das classes pai e filhos, uma propriedade/field que vai receber a transação e outra para conexão. Acho essa alternativa bem mais trabalhosa e com mais propensão à erros.
LUISCAMPANA12 25/09/2013 14:46:01
#429271
vou dar inicio nesse processo e qlqr duvida posto novamente obrigado
MADMAX 25/09/2013 17:07:12
#429281
KERPLUNK isso que eu quiz dizer sem desenhar kkkkk valeu !!!
Tópico encerrado , respostas não são mais permitidas