Transações Entity Linq

Amigos fiz uma descoberta importante.

Sempre que abria uma transação no contexto, ao dar commit  o sistema apresentava uma mensagem dizendo que existia uma datareader aberto que precisa ser fechado.

Veja o meu código:

 

            using (System.Data.Common.DbTransaction transaction = db.Transaction  = db.Connection.BeginTransaction(IsolationLevel.ReadCommitted))

{

try

{

db.SolicitacoesArquivosInserir(IdSolicitacao

, arquivos.NomeArquivo

, arquivos.Arquivo

, arquivos.DataInclusao

, AppUtils.User.IDPessoalUsuario.ToString());

db.Transaction.Commit();

AppUtils.Alerta(“Solicitação de Concessão de Compensatória registrada com sucesso!”);

Response.Redirect(“SolicitacoesGeralConsultar.aspx”);

}

catch (Exception)

{

try

{

db.Transaction.Rollback();

}

catch (Exception) { }

AppUtils.Alerta(“Ocorreu problema ao tentar gravar a informação”);

}

try

{

db.Connection.Close();

}catch(Exception){

}

}

 

O erro ocorria simplesmente porque a função SolicitacoesArquivosInserir estava retornando uma expressão linq (datareader) antes de efetuar o commit é necessário transforma-la em lista para eliminar o datareader para pode efetuar o commit sem problemas.

Seria apenas isso para não ter mais problemas no commit

db.SolicitacoesArquivosInserir(IdSolicitacao

, arquivos.NomeArquivo

, arquivos.Arquivo

, arquivos.DataInclusao

, AppUtils.User.IDPessoalUsuario.ToString()).ToList();

 

Translate »