如何在Entity Framework DbContext中获取用户的id

时间:2018-03-19 12:42:58

标签: entity-framework asp.net-core

我需要跟踪net core 2.0 EF中的数据库更改。一切正常,但我不知道如何在DbContext中获取userId。我需要让UserId为用户分配更改。我不能简单地运行_userManager.GetUserId(HttpContext.User).ToString();。有什么建议?在此先感谢您的帮助。

1 个答案:

答案 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。