我正在使用.NET Core 2.0和Entity Framework Core构建API。
我有一个用户数据库。当调用登录URI时,我在数据库中找到用户如下:
User user = _usersRepository.GetUserByEmail(model.Email);
然后我创建一个令牌(Guid),它存储在我刚刚获取的用户对象旁边的字典中。令牌将返回给使用者,然后需要授权。
对于需要授权的控制器操作,自定义属性从字典中获取当前用户对象(使用其标记)并使用HttpContext.Items将其传递给控制器。
我现在已经在控制器中登录了当前用户对象。
在控制器内部,我想更改此用户对象的属性,然后更新该用户的数据库条目。
这是我希望能够做到的(简化):
User authenticatedUser = HttpContext.Items.TryGetValue("authenticatedUser" ...)
authenticatedUser.Username = "John Doe";
_usersRepository.SaveChanges();
下面的工作,但引入了一个额外的数据库查询,看起来毫无意义和低效,因为我有authenticatedUser
的用户对象:
User authenticatedUser = HttpContext.Items.TryGetValue("authenticatedUser" ...)
User user = _usersRepository.GetUserById(authenticatedUser.Id);
user.Username = "John Doe";
_usersRepository.SaveChanges();
如何保存对authenticatedUser
所做的更改,而无需再次从我的数据库中提取?
答案 0 :(得分:3)
我认为你要找的是Attach
User authenticatedUser = HttpContext.Items.TryGetValue("authenticatedUser" ...)
if(authenticatedUser != null)
{
_usersRepository.Attach(authenticatedUser);
authenticatedUser.Username = "John Doe";
_usersRepository.SaveChanges();
}