我使用ASP.NET MVC 5創建Web應用程序。ASP.NET MVC 5身份 - 使用自定義用戶時「用戶名已存在」
對於我創建了一個seprate「網站用戶」類,它看起來像這樣我的應用程序的目的:
public class WebsiteUser
{
public WebsiteUser()
{
this.Comments = new List<CommentEntityModel>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ApplicationUser IdentityUser { get; set; }
public ICollection<CommentEntityModel> Comments { get; set; }
}
我的問題是當我嘗試和註冊新用戶到網站。
我註冊動作看起來像這樣
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Username, Email = model.Email };
var websiteUser = service.CreateWebsiteUser(user);
var result = await UserManager.CreateAsync(user, model.Password);
var websiteUserResult = service.RegisterWebsiteUser(websiteUser);
UserManager.AddToRole(user.Id, UserRoles.WebsiteUser.ToString());
if (result.Succeeded && websiteUserResult)
{
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
幾乎是默認的一個身份創建,除了這兩條線:
var websiteUser = service.CreateWebsiteUser(user);
var websiteUserResult = service.RegisterWebsiteUser(websiteUser);
我的服務對他們有什麼是這樣的:
CreateWebsiteUser()
public WebsiteUser CreateWebsiteUser(ApplicationUser appuser)
{
var user = new WebsiteUser
{
Name = appuser.UserName,
IdentityUser = appuser
};
return user;
}
RegisterWebsiteUser()
public bool RegisterWebsiteUser(WebsiteUser websiteUser)
{
try
{
this.context.WebsiteUsers.Add(new WebsiteUser {Name = websiteUser.Name, IdentityUser = websiteUser.IdentityUser});
this.context.SaveChanges();
return true;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
而我的問題是,每當我嘗試註冊一個新用戶,我得到的this.context.SaveChanges異常()線,稱爲「名稱爲|名稱|的用戶名已經存在」
|名稱|基本上是在ASPNetUsers表username列的值
我很堅持,並不能找到一個解決方案(我甚至無法理解。爲什麼像這樣的錯誤會發生)
我的數據庫結構似乎好了給我,所以我想這個問題是其他地方。
我能想到的唯一的解決辦法,就是徹底刪除我自己的用戶類裏將屬性添加到deafult ASP用戶。
任何幫助,非常感謝。
你有沒有調試的代碼,看看是什麼websiteUser.Name價值。 也爲什麼在插入創建WebsiteUser的新實例: 'this.context.WebsiteUsers.Add(新WebsiteUser {名稱= websiteUser.Name,IdentityUser = websiteUser.IdentityUser})' 可以改成 '這.context.WebsiteUsers.Add(websiteUser)' – Scrobi
正是因爲我正在調試,並希望看到這是否會有所幫助:D 'websiteUser.Name'就像它應該是,但它不會造成問題。 如果我不設置我的Web用戶的'IdentityUser'屬性,我沒有得到一個異常。 因此,當我分配一個IdentityUser到我的網站用戶:( – Kobek
是否它與WebsiteUser.Name&IdentityUser,名稱之間的衝突? – Scrobi