ASP.NET MVC 5 标识 - 使用自定义用户时"A user name already exists"



我正在使用ASP.NET MVC 5创建Web应用程序。

为了我的应用程序,我创建了一个seprate" 网站user "类,看起来像这样:

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(( line上获得异常|名称|已经存在" 。

|名称| 基本上是aspnetusers表中用户名列的值。

我真的很困难,找不到解决方案。(我什至不明白为什么会发生这样的错误(

我的DB结构对我来说似乎还可以,所以我想问题在其他地方。

我能想到的唯一解决方案是完全删除我自己的用户类,只需在DeAfult ASP用户中添加属性。

任何帮助都非常感谢。

解决了它。如果有人面临类似的问题,请在这里留在这里。

基本上,由于一些伏都教魔法,我不明白,当您尝试将纯粹创建的应用程序用户添加到自定义用户类的idenityuser属性中时,EF搞砸了,以为您正在使用2个数据上下文。

解决此问题的方法是使用 .find(id(在数据库中找到应用程序使用者,然后将其提供给属性。

所以,而不是去

public bool RegisterWebsiteUser(ApplicationUser appUser)
{
        this.context.YourUsers.Add(new YourUser {IdentityUser = appUser});
        this.context.SaveChanges();
}

您这样做:

public bool RegisterWebsiteUser(ApplicationUser applicationUser)
{
        string id = applicationUser.Id;
        var userFromDb = context.Users.Find(id);
        this.context.YourUsers.Add(new YourUser {IdentityUser = userFromDB});
        this.context.SaveChanges();
}

相关内容

  • 没有找到相关文章

最新更新