Emerson 0 Denunciar post Postado Março 28, 2010 Li em um livro que uma boa maneira de organizar a camada DAL seria criar um CS para cada tabela do banco de dados. Acontece que estou fazendo uns testes desenvolvendo um sistema de Agenda, onde tenho as tabelas Contato, fone e email. Quando insiro um contato ele me retorna o seu ID que será utilizado nas tabelas fone e email. O método que inseri o contato fica da seguinte maneira: Instancio o SqlConnection Instancio o sqlTransaction Realizo a inserção na tabela Contato que me retorna o ID com o ID insiro os dados na tabela fone com o ID insiro os dados na tabela email Se tudo tiver OK dou commit no Transaction e encerro a conexão Tudo isso em um único método, que acaba ficando gigante. Tentei organizar a DAL da maneira que li no livro que citei acima, mas eu tinha que ficar abrindo e fechando a conexão e o transaction para cada tabela, o que não está correto pois quando ocorre algum problema na tabela que esta sendo realizada a inserção o rollback é dado somente nela e os registros são inseridos nas demais tabelas. Dei toda essa explicação para perguntar. Qual a melhor maneira de modelar a DAL? Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Mitsunaka 11 Denunciar post Postado Março 29, 2010 O que você poderia fazer no seu caso, se der erro, você manda cancelar a rotina, usando "try catch". Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Março 29, 2010 Emersom, você pode criar uma Classe pra cada tabela com seus respectivos metodos, e chama-los onde quiser. POr exemplo. Chama o método que insere na tabela inicial e retorna o ID e com o ID você chama os outros metodos passando como parametro o id retornado no primeiro metodo. Compartilhar este post Link para o post Compartilhar em outros sites
Emerson 0 Denunciar post Postado Março 30, 2010 Rafael e Ivan estou desenvolvendo exatamente da maneira como vocês disseram: public int incluir() { Instancio o SqlConnection Instancio o sqlTransaction try { Realizo a inserção na tabela Contato que me retorna o ID inserirFone(ID) //com o ID insiro os dados na tabela fone inserirEmail(ID) //com o ID insiro os dados na tabela email Se tudo tiver OK dou commit no Transaction e encerro a conexão } catch { Caso ocorra algum problema dou rollback no Transaction } finally { fecho a conexao } } A questão é como utilizar nos métodos inserirFone e inserirEmail o Transaction que instaciei no método incluir? Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Março 30, 2010 Basta informar a transação nos dois métodos como parâmetro de entrada, ae sempre utilize esta variável instanciada. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites