Возможно, но я не рекомендую этого, потому что я согласен с комментаторами, что ведение журнала принадлежит вашим службам и контроллерам.
EF Core 2.1 позволяет внедрить DbContext в приватный конструктор, который EF будет вызывать. См. официальные документы .
Сначала вам нужно предоставить свойство LoggerFactory
в вашем классе DbContext.
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options, ILoggerFactory loggerFactory = null)
{
LoggerFactory = loggerFactory;
}
public ILoggerFactory LoggerFactory { get; }
}
Затем вы можете внедрить DbContext в закрытый конструктор в вашем классе сущности.
public class Person
{
private readonly ILogger _logger;
public Person() { } // normal public constructor
private Person(MyDbContext db) // private constructor that EF will invoke
{
_logger = db.LoggerFactory?.CreateLogger<Person>();
}
public bool HasCat()
{
_logger?.LogTrace("Check has cat");
return true;
}
}