Muitas operações realizadas com o banco de dados devem ser realizadas na integra, ou seja, caso ocorra um erro em uma parte da operação ela deverá ser cancelada por completo. Estas operações devem ser executadas então dentro de uma transação.
O Linq To SQL oferece o mapeamento de conexão com banco de dados SQL Server e também recursos de transação.
Abaixo segue um exemplo para otimizar as transações efetuadas pelo Linq To SQL.
———————————————————————————
// Classe de otimização de transação.
using System;
using System.Data.Linq;
namespace MinhaAplicacao
{
 public class Transacao
{
private readonly DataContext _db;
private readonly Action _evento;
public Transacao(DataContext db, Action evento)
{
 _db = db;
_evento = evento; // contém o trecho de código utilizado com a transação
}
public void Executar()
{
try
{
IniciarTransacao();
_evento(); // executa o trecho de código utilizado com a transação
ConfirmarTransacao();
}
catch
{
if (_db != null) ReverterTransacao();
throw;
}
finally
{
if (_db != null) EncerrarConexao();
}
}
private void IniciarTransacao()
{
_db.Connection.Open();
_db.Transaction = _db.Connection.BeginTransaction();
}
private void ConfirmarTransacao()
{
 _db.SubmitChanges();
_db.Transaction.Commit();
}
private void ReverterTransacao()
{
_db.Transaction.Rollback();
}
private void EncerrarConexao()
{
_db.Connection.Close();
}
}
}
———————————————————————————
// Código na aplicação
try
{
var db = new MeuBancoDataContext();
var transacao = new Transacao(db, () =>
{
// Códigos (inserção, atualização, deleção, etc) de operações a serem executadas no banco de dados
});
transacao.Executar();
}
catch (Exception e)
{
// tratamento de exeção
}
No exemplo acima, a classe Transacao se encarrega de todos os métodos necessários para gerar a transação, assim sua utilização torna-se mais simples, pois apenas será necessário ao desenvolvedor informar que operações que executarão dentro da transação.

Sobre romam

Thiago Romam escreveu 2 artigos no blog.

Tagged with →  
Share →

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>