Transação FireBird C Sharp

.NET

C#

Firebird

07/04/2017

Bom dia, meu projeto está em n camadas, e tem a camada de Data Provider que só abre a FbConnection e executa o comando passado (cmd.ExecuteNonQuery()), e minha camada BLL faz a chamada dela pra inserir, alterar, excluir registros, porém queria abrir uma transação, mas não estou conseguindo com essa estrutura, porque ficou bem engessada, gostaria de saber se tem alguma forma de abrir uma conexão global?

Por exemplo, hoje está assim, e quando estou inserindo uma lista de registros, abre a conexão pra cada comando insert.

FbConnection connection = new FbConnection(ConnectionString); 
connection.Open();
FbCommand cmd = new FbCommand(sql, connection);
cmd.Dispose();


Agradeço desde já a ajuda.
Natália

Natália

Curtidas 0

Melhor post

Joel Rodrigues

Joel Rodrigues

12/04/2017

Olá, Natália. Tudo bem?

A primeira coisa que deve ser avaliada aí é como deixar a conexão como Singleton, ou seja, esse objeto do tipo FBConnection não precisa ser instanciado em todos os métodos. Ao invés disso, você deve ter apenas uma instância para toda a aplicação.

Em seguida, você pode criar um método para fazer esse insert na forma de batch, ou seja, um lote de inserts de uma única vez, quando isso for necessário. Nele você deve abrir a conexão, iniciar a transação, fazer um loop e a cada iteração realizar o comando de insert. Ao final você faz o commit da transação.

Abraço.
GOSTEI 1
POSTAR