Como evitar o Lock do banco de dados utilizando Transaction do EntityFramework

Eu tenho um método onde salvo várias classes e chamo outro método para fazer uma otimização em cima dessas classes, porém estou utilizando Transaction, para caso de algo de errado nessa otimização eu preciso dar rollback.

Transaction

 using (var context = new AppContext())
        {
            using (var dbContextTransaction = context.Database.BeginTransaction())
            {

Eu tentei trocar o isolationLevel assim:

        using (var dbContextTransaction = context.Database.BeginTransaction(IisolationLevel.snapshot))

Porém mesmo assim ele continua dando lock no banco, gostaria de saber porque isso acontece e como eu faria para contornar essa situação.

obs. utilizando de alguns comandos diretamente no banco de dados eu consegue o comportamento experado, porém me parece que o isolationLevel que eu seto no BeginTransaction não esta servindo de nada, caso alguém possa me explicar o funcionamento e me esclarer o que estou deixando passar, ficarei grato.

Comandos utilizados:

ALTER DATABASE [DB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [DB] SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE [DB] SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE [DB] SET MULTI_USER

Muito Obrigado!

Leave a Reply

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