簡體   English   中英

Asp.net Identity 2.0更新用戶

[英]Asp.net Identity 2.0 update user

將用戶更改保存到數據庫時遇到問題,例如更改此人的姓名。 我正在使用IdentityModel,它是使用個人身份驗證在新的VS2013 Web項目中自動創建的。 遺憾的是,除了更改角色之外,模板不允許您更改任何用戶信息。 我通過谷歌環顧四周,我找不到多少。 任何人使用基本身份代碼實現更新?

這是我發現的最接近的事情:

更新用戶數據 - Asp.net身份

我沒有成功合並默認模板。 我本周剛剛開始使用Identity,所以可能是我缺乏理解這就是問題所在。

var updatedUser = new ApplicationUser
            {
                Id = model.UserId,
                UserName = model.UserName,
                CustomerId = model.CustomerId,
                Email = model.EmailAddress,
                FirstName = model.FirstName,
                LastName = model.LastName,
                PhoneNumber = model.PhoneNumber,                    
            };

...
var result = await UserManager.UpdateAsync(updatedUser);

我的UserManager是這樣創建的:

return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

我在瀏覽器中收到以下錯誤:

附加“ApplicationUser”類型的實體失敗,因為同一類型的另一個實體已具有相同的主鍵值。 如果圖中的任何實體具有沖突的鍵值,則在使用“附加”方法或將實體的狀態設置為“未更改”或“已修改”時,可能會發生這種情況。 這可能是因為某些實體是新的並且尚未收到數據庫生成的鍵值。 在這種情況下,使用“添加”方法或“已添加”實體狀態來跟蹤圖表,然后根據需要將非新實體的狀態設置為“未更改”或“已修改”

謝謝

我遇到的問題是我創建了一個ApplicationUser並將對象保存到數據庫中。 由於Identity使用Entity Framework,因此添加了“updatedUser”對象的實體狀態。 因此實體框架試圖插入到Identity數據庫中,從而導致沖突。 因此,您必須獲取用戶並更新Entity Framework的返回用戶對象 ,以了解實體狀態是否已修改。 這是工作代碼:

var user = await UserManager.FindByIdAsync(model.UserId);

user.Email = model.EmailAddress;
user.CustomerId = model.CustomerId;
user.FirstName = model.FirstName;
user.PhoneNumber = model.PhoneNumber;
user.LastName = model.LastName;

var result = await UserManager.UpdateAsync(user);

您還可以使用AuthContext並將狀態更新為EntityState.Modified。 以下是一個例子。 這將允許您只對數據庫進行一次調用,而不是兩次。

AuthContext authContext = new AuthContext(); authContext.Entry(updatedUser).State = EntityState.Modified;

暫無
暫無

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

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