我需要跟踪net core 2.0 EF中的数据库更改。一切正常,但我不知道如何在DbContext中获取userId。我需要让UserId为用户分配更改。我不能简单地运行_userManager.GetUserId(HttpContext.User).ToString();
。有什么建议?在此先感谢您的帮助。
答案 0 :(得分:2)
在ConfigureServices
中的Startup.cs
方法中添加:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddEntityFrameworkSqlServer();
services.AddEntityFrameworkSqlServer()
位将服务解析程序添加到您的上下文中,允许您在上下文中使用GetService
扩展方法。
然后,在您的上下文中,您可以:
var httpContextAccessor = this.GetService<IHttpContextAccessor>();
结果可能为null,特别是如果上下文未在Web应用程序中运行(即在迁移期间,使用您的上下文的控制台应用程序等)。因此,您应该进行适当的空检查。以下使用C#6的空条件运算符:
var userId = httpContextAccessor?.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
然后,userId
将具有当前登录用户的id或为null。