Nel mio progetto web sto usando EF6 e vorrei registrare l'SQL generato per scopi di debug.
Sto anche utilizzando log4net per gestire i registri, quindi sto cercando un modo per integrarli insieme.
Qual è il modo corretto per raggiungere questo obiettivo?
Al momento sto usando questo approccio: nel mio BaseController
ho qualcosa del genere:
public class BaseController
{
protected MyDbContext DataContext { get; set; }
protected readonly ILog logger;
public BaseController()
{
DataContext = new MyDbContext();
logger = LogManager.GetLogger(GetType());
DataContext.Database.Log = (dbLog => logger.Debug(dbLog));
// ...
}
//...
}
Non so se questo è il modo migliore, ma funziona ...
se qualcuno dopo 2 anni cerca ancora una soluzione:
la soluzione di @davioooh mi ha portato a qualcosa di simile (se probabilmente utilizzi Entity Framework non con un WebApi, o non vuoi usare un BaseController
):
Proprio quando si eredita da DbContext
puoi farlo anche nel costruttore:
public class MyContext:DbContext
{
private readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public MyContext()
: base("<connectionstring>")
{
Database.Log = log => _logger.Debug(log);
}
}