DbContext
имеет внутреннего поставщика услуг.Вам нужно будет добавить две вещи к вашему Startup.cs
:
services.AddHttpContextAccessor();
services.AddDbContext(o => o
.UseSqlServer(...) // or whatever
.UseInternalServiceProvder());
Затем вы можете переопределить что-то вроде SaveChangesAsync
для ведения журнала.Чтобы получить доступ к пользователю:
var httpContextAccessor = GetService<IHttpContextAccessor>();
var principal = httpContextAccessor?.HttpContext.User;
Имейте в виду, что, поскольку DbContext
может использоваться вне запроса, httpContextAccessor
может быть нулевым.Вот почему нулевой условный оператор используется выше.Это, однако, означает, что principal
также может быть нулевым.