使用MVC身份,无法在数据库中插入用户,错误为“UserName已被使用”

本文关键字:UserName 错误 插入 身份 MVC 使用 数据库 用户 | 更新日期: 2023-09-27 18:16:00

我很沮丧。我尽量说得具体一点。

我是一个新手,当它涉及到身份认证,虽然我设法完成整个身份/Owin设置教程从这个链接

正如我所说,我设法在一个单独的项目中完成它,我只是为了遵循教程而创建的,而且它运行良好。

现在,当我试图将我在实际项目中学到的东西与我在教程中使用的完全相同的代码集成时,问题就来了。这个项目的不同之处在于,我将我的解决方案分为三个项目,分别是BusinessLayer、DataObjects和UI。在这个解决方案中,我不能从教程的第一部分传递,只有"基础"部分,我应该添加一个用户与硬编码值。

这是我有的。在DataObjects项目中,我有一个"IdentityModel.cs",我扩展了IdentityUser和IdentityDbContext类。它看起来像这样:

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int AccountTypeId { get; set; }
    public DateTime CreatedOn { get; set; }
    public string CreatedBy { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext() : base("AdsTracker_DevEntities")
    {
    }
}

"AdsTracker_DevEntities"是我的连接字符串的名称,它是在web中声明的。配置DataObjects项目。然后,在BusinessLayer项目中,我有一个名为"ProjectStart"的文件夹。在这个文件夹中,我有一个"IdentityConfig.cs"与以下代码:

   public class ApplicationUserStore : UserStore<ApplicationUser>
{
    public ApplicationUserStore(ApplicationDbContext context) : base(context)
    {
    }
}
public class ApplicationUserManager : UserManager<ApplicationUser>
{
    public ApplicationUserManager(IUserStore<ApplicationUser> store) : base(store)
    {
    }
}

然后,我在UI项目中有一个控制器,它简单地调用BusinessLayer中的"CreateUser"函数。CreateUser函数如下所示:

 public async Task<string> AddUser()
    {
        ApplicationUser user;
        ApplicationUserStore Store = new ApplicationUserStore(new ApplicationDbContext());
        ApplicationUserManager userManager = new ApplicationUserManager(Store);
        user = new ApplicationUser
        {
            FirstName = "Lilian",
            LastName = "Cobian",
            AccountTypeId = 1,
            UserName = "test.test",
            Email = "prueba@gfrmedia.com",
            CreatedOn = DateTime.Now
        };
        var result = await userManager.CreateAsync(user, "P@ssword");
        if (!result.Succeeded)
        {
            return result.Errors.First();
        }
        return "User Added";
    }

就是这样。现在,它的行为是什么?如果我添加一个用户,用户名为"test。,即"await userManager. test"的结果。CreateAsync(用户,"P@ssword");"代码是"成功",但当我去检查数据库时,没有插入任何内容。现在,如果我再次调用该函数,并尝试添加相同的用户,它会返回错误"user Name already taken"。再一次,我去数据库,根本没有记录!!如何采取措施?

这就是奇怪的部分。在我创建遵循教程的唯一项目中,一切都很好,记录被添加到数据库中,但是当我尝试将其集成到我的实际项目中时,它的行为就像我提到的。

可能是因为connectionstring是在web中声明的。配置的数据对象项目,而不是在业务层?但是,它为什么以及如何"知道"我已经添加了"测试"。如果数据库????中没有任何记录,则测试"user"

拜托,这快把我逼疯了。如有任何帮助,不胜感激。

谢谢! !

使用MVC身份,无法在数据库中插入用户,错误为“UserName已被使用”

我终于解决了我的问题。它正在写入位于AppData文件夹中的localdb, .mdf。根据你们给我的一些建议,我重新检查了我的web.config。问题是,我向DataObjects项目添加了一个.edmx,指向正确的SQL数据库,这反过来又向正确的数据库添加了一个连接字符串,但我从未将连接字符串添加到UI web。配置文件。UI是主要的项目,所以它似乎是web。配置还需要正确的连接字符串。

我认为它已经插入到DB,也许你检查错误的表,使用Microsoft Identity它会插入到一个特殊的表名以identity或类似的东西。
顺便说一下,这个Identity的东西太烂了,太复杂,没用,失控了。这浪费了我的一些时间,后来我发现认证只是一个cookie读写的东西,如果你自己做,你会重生,更多谷歌这个