[英]Asp.net Identity 2.0 update user
將用戶更改保存到數據庫時遇到問題,例如更改此人的姓名。 我正在使用IdentityModel,它是使用個人身份驗證在新的VS2013 Web項目中自動創建的。 遺憾的是,除了更改角色之外,模板不允許您更改任何用戶信息。 我通過谷歌環顧四周,我找不到多少。 任何人使用基本身份代碼實現更新?
這是我發現的最接近的事情:
我沒有成功合並默認模板。 我本周剛剛開始使用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.