簡體   English   中英

實體框架未跟蹤更新實體

[英]Update Entity Not Being Tracked By Entity Framework

我正在使用.NET Core 2.0和Entity Framework Core構建API。

我有一個用戶數據庫。 當調用登錄URI時,我在數據庫中找到用戶,如下所示:

User user = _usersRepository.GetUserByEmail(model.Email); 

然后,我創建一個令牌(Guid),該令牌與剛獲取的用戶對象一起存儲在字典中。 令牌返回給使用者,然后需要進行授權。

對於需要授權的控制器操作,自定義屬性從字典中獲取當前用戶對象(使用其令牌),然后使用HttpContext.Items將其傳遞給控制器​​。

我現在在控制器中有當前登錄的User對象。

在控制器內部,我想更改此用戶對象的屬性,然后為該用戶更新數據庫條目。

這是我想做的(簡化):

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所做的更改而不必再次從數據庫中獲取?

我認為您正在尋找的是Attach

User authenticatedUser = HttpContext.Items.TryGetValue("authenticatedUser" ...)   
if(authenticatedUser != null)
{
    _usersRepository.Attach(authenticatedUser);  
    authenticatedUser.Username = "John Doe";  
    _usersRepository.SaveChanges(); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM