Migrating to Asp.Net Identity 2.0: new columns not being created in AspNetUsers table

前端 未结 7 1455
感情败类
感情败类 2020-12-29 13:28

I get the following error when I try to register a new user, using Identity 2.0 and the default MVC 5 application:

Invalid column name \'Email\'.
Invalid col         


        
相关标签:
7条回答
  • 2020-12-29 13:38

    I was having the same problem. I used this manual migration and I haven't run into any additional issues yet.

    public override void Up()
    {
        RenameColumn(table: "dbo.AspNetUserClaims", name: "User_Id", newName: "UserId");
        RenameIndex(table: "dbo.AspNetUserClaims", name: "IX_User_Id", newName: "IX_UserId");
        DropPrimaryKey("dbo.AspNetUserLogins");
        AddColumn("dbo.AspNetUsers", "Email", c => c.String(maxLength: 256));
        AddColumn("dbo.AspNetUsers", "EmailConfirmed", c => c.Boolean(nullable: false));
        AddColumn("dbo.AspNetUsers", "PhoneNumber", c => c.String()); 
        AddColumn("dbo.AspNetUsers", "PhoneNumberConfirmed", c => c.Boolean(nullable: false));
        AddColumn("dbo.AspNetUsers", "TwoFactorEnabled", c => c.Boolean(nullable: false));
        AddColumn("dbo.AspNetUsers", "LockoutEndDateUtc", c => c.DateTime());
        AddColumn("dbo.AspNetUsers", "LockoutEnabled", c => c.Boolean(nullable: false));
        AddColumn("dbo.AspNetUsers", "AccessFailedCount", c => c.Int(nullable: false));
        AlterColumn("dbo.AspNetUsers", "UserName", c => c.String(nullable: false, maxLength: 256));
        AlterColumn("dbo.AspNetUsers", "FirstName", c => c.String(nullable: false));
        AlterColumn("dbo.AspNetUsers", "LastName", c => c.String(nullable: false));
        AddColumn("dbo.AspNetUsers", "CreatedDateTime", c => c.DateTime(nullable: false));
        AlterColumn("dbo.AspNetRoles", "Name", c => c.String(nullable: false, maxLength: 256));
        AddPrimaryKey("dbo.AspNetUserLogins", new[] { "LoginProvider", "ProviderKey", "UserId" });
        CreateIndex("dbo.AspNetUsers", "UserName", unique: true, name: "UserNameIndex");
        CreateIndex("dbo.AspNetRoles", "Name", unique: true, name: "RoleNameIndex");
        DropColumn("dbo.AspNetUsers", "Discriminator");
    } 
    

    Taken from: http://adamstephensen.com/2014/05/02/upgrading-from-asp-net-identity-1-0-to-2-0/

    0 讨论(0)
  • 2020-12-29 13:38

    You have to modify all the entities that have been updated in version 2.0, for example:

    public partial class AspNetUser
    {    
        public AspNetUser()
        {
            AspNetUserClaims = new HashSet<AspNetUserClaim>();
            AspNetUserLogins = new HashSet<AspNetUserLogin>();
            AspNetRoles = new HashSet<AspNetRole>();
        }
    
        public string Id { get; set; }
    
        [StringLength(256)]
        public string UserName { get; set; }
    
        public string PasswordHash { get; set; }
    
        public string SecurityStamp { get; set; }
    
        [MaxLength(256)]
        public string Email { get; set; }
    
        public bool EmailConfirmed { get; set; }
    
        public string PhoneNumber { get; set; }
    
        public bool PhoneNumberConfirmed { get; set; }
    
        public bool TwoFactorEnabled { get; set; }
    
        public DateTime LockoutEndDateUtc { get; set; }
    
        public bool LockoutEnabled { get; set; }
    
        public int AccessFailedCount { get; set; }
    
        public int UserId { get; set; }
    
        public virtual ICollection<AspNetUserClaim> AspNetUserClaims { get; set; }
    
        public virtual ICollection<AspNetUserLogin> AspNetUserLogins { get; set; }
    
        public virtual User User { get; set; }
    
        public virtual ICollection<AspNetRole> AspNetRoles { get; set; }
    }
    
    public partial class AspNetUserClaim
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
    
        public string ClaimType { get; set; }
    
        public string ClaimValue { get; set; }
    
        [Required]
        [StringLength(128)]
        public string UserId { get; set; }
    
        public virtual AspNetUser AspNetUser { get; set; }
    }
    

    You also need to modify mappings of the entities that changed in the OnModelCreating method of your dbcontext, After this you can add your migration

    0 讨论(0)
  • 2020-12-29 13:39

    I ran into same error. All I did was to manually add LockoutEndDateUtc column in AspNetUser

    0 讨论(0)
  • 2020-12-29 13:46

    I had the same problem. Based on what Dan Gershony said, I simply uninstalled the Microsoft.AspNet.Identity.EntityFramework 2.0.0.0 and install an older version like Microsoft.AspNet.Identity.EntityFramework -Version 1.0.0. This solved my problem.

    0 讨论(0)
  • 2020-12-29 13:53

    Tried the solution proposed by user1502551 but it gave me issues and didn't include the Down() method. The problems I was having was that the indexes being altered didn't exist by default from Identity 1.0 and there were a couple of extra columns that 2.0/2.1 doesn't expect (namely First and Last Name fields). Full Up() and Down() here:

    public override void Up()
        {
            RenameColumn(table: "dbo.AspNetUserClaims", name: "User_Id", newName: "UserId");
            AddColumn("dbo.AspNetUsers", "Email", c => c.String());
            AddColumn("dbo.AspNetUsers", "EmailConfirmed", c => c.Boolean(nullable: false));
            AddColumn("dbo.AspNetUsers", "PhoneNumber", c => c.String());
            AddColumn("dbo.AspNetUsers", "PhoneNumberConfirmed", c => c.Boolean(nullable: false));
            AddColumn("dbo.AspNetUsers", "TwoFactorEnabled", c => c.Boolean(nullable: false));
            AddColumn("dbo.AspNetUsers", "LockoutEndDateUtc", c => c.DateTime());
            AddColumn("dbo.AspNetUsers", "LockoutEnabled", c => c.Boolean(nullable: false));
            AddColumn("dbo.AspNetUsers", "AccessFailedCount", c => c.Int(nullable: false));
            AlterColumn("dbo.AspNetUsers", "UserName", c => c.String(nullable: false));
            DropColumn("dbo.AspNetUsers", "Discriminator");
        }
    
        public override void Down()
        {
            AddColumn("dbo.AspNetUsers", "Discriminator", c => c.String(nullable: false, maxLength: 128));
            AlterColumn("dbo.AspNetUsers", "UserName", c => c.String(nullable: true));
            DropColumn("dbo.AspNetUsers", "AccessFailedCount");
            DropColumn("dbo.AspNetUsers", "LockoutEnabled");
            DropColumn("dbo.AspNetUsers", "LockoutEndDateUtc");
            DropColumn("dbo.AspNetUsers", "TwoFactorEnabled");
            DropColumn("dbo.AspNetUsers", "PhoneNumberConfirmed");
            DropColumn("dbo.AspNetUsers", "PhoneNumber");
            DropColumn("dbo.AspNetUsers", "EmailConfirmed");
            DropColumn("dbo.AspNetUsers", "Email");
            RenameColumn(table: "dbo.AspNetUserClaims", name: "UserId", newName: "User_Id");
        }
    
    0 讨论(0)
  • 2020-12-29 13:57

    Are you sure you got the correct User class in your Dbcontext? If you want to modify your User table you should inhert like this:

    public class ApplicationDbContext : IdentityDbContext<MyCustomUserClass>
    {
        ...
    }
    

    and don t put anything like:

    public DbSet<MyCustomUserClass> Users { get; set; }
    

    in there since it will already happen in the base class.

    0 讨论(0)
提交回复
热议问题