Entity framework 如何获得用户';实体框架DbContext中的id

Entity framework 如何获得用户';实体框架DbContext中的id,entity-framework,asp.net-core,Entity Framework,Asp.net Core,我需要跟踪NETCore2.0EF中的数据库更改。这一切都是可行的,但我不知道如何在DbContext中获取userId。我需要获取UserId以将更改分配给用户。我不能简单地运行\u userManager.GetUserId(HttpContext.User.ToString()。有什么建议吗?提前感谢您的帮助。在Startup.cs中的ConfigureServices方法中添加: services.AddSingleton<IHttpContextAccessor, HttpCon

我需要跟踪NETCore2.0EF中的数据库更改。这一切都是可行的,但我不知道如何在DbContext中获取userId。我需要获取UserId以将更改分配给用户。我不能简单地运行
\u userManager.GetUserId(HttpContext.User.ToString()。有什么建议吗?提前感谢您的帮助。

Startup.cs中的
ConfigureServices
方法中添加:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddEntityFrameworkSqlServer();
结果可能为空,特别是当上下文未在web应用程序中运行时(即在迁移期间,使用上下文的控制台应用程序等)。因此,您应该进行适当的空检查。下面使用C#6的空条件运算符:

var userId = httpContextAccessor?.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);

然后,
userId
将具有当前登录用户的id或为空。

的可能重复项不允许任何DbContext类从任何应用程序上下文中查找用户id,这违反了单一责任原则。您可以通过构造函数参数输入用户Id。实际上,我重写了异步任务savechangesync方法,并且从内部无法访问contex。你能再解释一下我的想法吗?对不起。应该是
this
而不是
context
。我尝试了这个指针。早期的。但是GetService方法不可用。也许在dbcontex中有一些特殊的配置可以使用DI。DI应该在dbcontext中工作吗?抱歉问了这么多问题。严重性代码说明项目文件行抑制状态错误CS1061“ApplicationDbContext”不包含“GetService”的定义,并且找不到接受“ApplicationDbContext”类型的第一个参数的扩展方法“GetService”(是否缺少using指令或程序集引用?)@Lukas您是否尝试添加:使用Microsoft.EntityFrameworkCore.Infrastructure;这只在请求的上下文中起作用。如果您试图在请求管道之外使用此选项,则用户将始终为null。否则,它应该可以正常工作。无法将UserManager注入到上下文中,因为UserManager取决于您的上下文。它本质上是一个包裹。
var userId = httpContextAccessor?.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);