‘The log for database ‘’ is not available

1 view
Skip to first unread message

Carlos Admirador

unread,
Dec 12, 2022, 3:21:18 PM12/12/22
to AltNet-Hispano
Tengo un constante problema con la BD nueva que estoy utilizando para una API en .NET 6. Constantemente me da problemas con logs ‘The log for database ‘’ is not available. Check the event log for related error messages. Resolve any errors and restart the database.’  La bd aún no está en producción, por lo que los registros que tiene son de pruebas de usuarios internos.

Instalé MiniProfiler en el proyecto para intentar ver el tracing de lo que hace EF Core.
Sucede que en el proyecto utilizo Ardalis. Specification para el manejo de repositorios y por aparte tengo definido un PipeLine de MediatR para los casos de uso que requiero el transacciones e utilizo una interfaz ITransactionalRequest para agregarla a los casos de uso que necesito transacciones:

using System;
using System.Threading;
using System.Threading.Tasks;
using Application.Contracts;
using MediatR;
using Microsoft.Extensions.Logging;

namespace Application.Behaviours 
{

public class TransactionBehaviour<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse> where TRequest : IRequest<TResponse>, ITransactionalRequest
{

private readonly ILogger<TransactionBehaviour<TRequest, TResponse>> _logger;
private readonly IDbContext _dbContext;

public TransactionBehaviour(IDbContext dbContext, ILogger<TransactionBehaviour<TRequest, TResponse>> logger)
{

_dbContext = dbContext ?? throw new ArgumentException(null, nameof(dbContext));
_logger = logger ?? throw new ArgumentException(nameof(ILogger));
 public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken cancellationToken)
 TResponse response = default; 

 try 

if (_dbContext.HasActiveTransaction) 
{
return await next();

 await _dbContext.RetryOnExceptionAsync(async () => {
_logger.LogInformation($"Begin Transaction {typeof(TRequest).Name}"); 

 await _dbContext.BeginTransactionAsync(); 
 response = await next();
await _dbContext.CommitTransactionAsync(); _logger.LogInformation($"Committed transaction {typeof(TRequest).Name}");

}); 
 return response;

}
catch(Exception e) 

 _logger.LogError($"Rollback transaction executed {typeof(TRequest).Name}");
_logger.LogError(e.StackTrace); _dbContext.RollbackTransaction(); throw;
}

}
}
}



Conversando con el DBA, me comentaba que es posible que transacciones se estén queden abiertas o bloqueadas y eso pueda estar causando que se dañen los logs de la bd. Es extraño porque revisando el código, en ningún otro lugar aparte de TransactionBehaviour ejecuto métodos de transacciones de EF Core como BeginTransaction, Rollback, etc., únicamente los que proporcionan los repositorios.

Alguna sugerencia?

Reply all
Reply to author
Forward
0 new messages