AspNet Identity 2.0电子邮件和用户名重复

San*_*osh 7 asp.net-mvc entity-framework asp.net-identity

我现在的Asp.Net MVC 5个项目任务的电子邮件地址用户名.现在我想 ASPNet Identity v1.0 升级v2.0以利用其所有新功能(参见此处).

但是,ASPNet Identity v2.0将Email作为单独的列添加到Users表,并将相应的属性添加到IdentityUser类.

我不想将UserName复制到这个新的电子邮件列中.如何映射 IdentityUser的此电子邮件属性以使用现有的UserName列和属性?是否可以忽略此Email属性并跳过在Users表中添加列?有人试过吗?

请分享.

更新

这是身份2.0的限制.我们不能忽略电子邮件属性或将其保留为空.某些身份功能无效.:(

dim*_*ima 4

您可以尝试以下其中一项:

  1. 尝试通过覆盖类Email中的属性User并取消映射或使用流畅的 API 来忽略它。

    public class ApplicationUser : IdentityUser
    {
      // ....
    
      [NotMapped]
      public override string Email { get; set; }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ApplicationUser>().Ignore(u => u.Email);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当您注册用户时,只需确保您填写了Email您的UserName

    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            // ...
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

当然,Email如果你不打算使用它,你总是可以忽略列,因为它允许 NULL,它只会AspNetUsers和一堆 NULL 一起坐在你的表中,这不是最好的方法,但请记住,忽略它你可能会丢失ASP.NET Identity 2 可能提供您可能想要使用的新功能。

注意但是我不确定选项 1 是否适用于Email属性,因为它可能在新的身份代码中到处使用。不过值得一试。我知道如果您不需要其他列,这就是您可以删除它们的方法。我个人碰巧使用了新的Email属性/列,所以我还没有尝试过。

不确定它是否对您有帮助,但我想我会分享它以防万一。

  • 我已经尝试过你的选项 1,但没有成功。(InvalidOperationException:属性“Email”不是类型“ApplicationUser”上声明的属性。使用 Ignore 方法或 NotMappedAttribute 数据注释验证该属性是否未从模型中显式排除。确保它是有效的原始属性.)您的选项 2 已显示在示例中(检查 nuget.org/packages/Microsoft.AspNet.Identity.Samples)。我不想在用户表中包含电子邮件列,所以这个问题! (2认同)