I created a new project that is using MVC Entity Framework with Individual User Accounts. I want to add FirstName and LastName as properties of a user. The steps in this blog amount to these:
1) Create and run new Project
2) Enable Migrations
3) Add new Properties to ApplicationUser in IdentityModel
4) Add Migration and Update Database
- after this you can verify the new fields are in AspNetUsers table
5) Update RegisterViewModel
6) Update Register View
7) Update Account Controller's Register Post
I did steps 1 - 4, but when I look at AspNetUsers table the fields are not there and I don't understand why.
This is what I did per step 3:
Public Class ApplicationUser
Inherits IdentityUser
Public FirstName As String
Public LastName As String
But after step 4 this is what my table looks like:
Why are FirstName and LastName not getting added to the table as expected?
This is what is in my Package Manager Console:
PM> enable-migrations
Checking if the context targets an existing database...
Code First Migrations enabled for project CustomUserProperties.
PM> add-migration "name"
Scaffolding migration 'name'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration name' again.
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201510191912542_name].
Applying explicit migration: 201510191912542_name.
Running Seed method.
PM>
This is the contents of the Migration:
Imports System
Imports System.Data.Entity.Migrations
Imports Microsoft.VisualBasic
Namespace Migrations
Public Partial Class name
Inherits DbMigration
Public Overrides Sub Up()
CreateTable(
"dbo.AspNetRoles",
Function(c) New With
{
.Id = c.String(nullable := False, maxLength := 128),
.Name = c.String(nullable := False, maxLength := 256)
}) _
.PrimaryKey(Function(t) t.Id) _
.Index(Function(t) t.Name, unique := True, name := "RoleNameIndex")
CreateTable(
"dbo.AspNetUserRoles",
Function(c) New With
{
.UserId = c.String(nullable := False, maxLength := 128),
.RoleId = c.String(nullable := False, maxLength := 128)
}) _
.PrimaryKey(Function(t) New With { t.UserId, t.RoleId }) _
.ForeignKey("dbo.AspNetRoles", Function(t) t.RoleId, cascadeDelete := True) _
.ForeignKey("dbo.AspNetUsers", Function(t) t.UserId, cascadeDelete := True) _
.Index(Function(t) t.UserId) _
.Index(Function(t) t.RoleId)
CreateTable(
"dbo.AspNetUsers",
Function(c) New With
{
.Id = c.String(nullable := False, maxLength := 128),
.Email = c.String(maxLength := 256),
.EmailConfirmed = c.Boolean(nullable := False),
.PasswordHash = c.String(),
.SecurityStamp = c.String(),
.PhoneNumber = c.String(),
.PhoneNumberConfirmed = c.Boolean(nullable := False),
.TwoFactorEnabled = c.Boolean(nullable := False),
.LockoutEndDateUtc = c.DateTime(),
.LockoutEnabled = c.Boolean(nullable := False),
.AccessFailedCount = c.Int(nullable := False),
.UserName = c.String(nullable := False, maxLength := 256)
}) _
.PrimaryKey(Function(t) t.Id) _
.Index(Function(t) t.UserName, unique := True, name := "UserNameIndex")
CreateTable(
"dbo.AspNetUserClaims",
Function(c) New With
{
.Id = c.Int(nullable := False, identity := True),
.UserId = c.String(nullable := False, maxLength := 128),
.ClaimType = c.String(),
.ClaimValue = c.String()
}) _
.PrimaryKey(Function(t) t.Id) _
.ForeignKey("dbo.AspNetUsers", Function(t) t.UserId, cascadeDelete := True) _
.Index(Function(t) t.UserId)
CreateTable(
"dbo.AspNetUserLogins",
Function(c) New With
{
.LoginProvider = c.String(nullable := False, maxLength := 128),
.ProviderKey = c.String(nullable := False, maxLength := 128),
.UserId = c.String(nullable := False, maxLength := 128)
}) _
.PrimaryKey(Function(t) New With { t.LoginProvider, t.ProviderKey, t.UserId }) _
.ForeignKey("dbo.AspNetUsers", Function(t) t.UserId, cascadeDelete := True) _
.Index(Function(t) t.UserId)
End Sub
Public Overrides Sub Down()
DropForeignKey("dbo.AspNetUserRoles", "UserId", "dbo.AspNetUsers")
DropForeignKey("dbo.AspNetUserLogins", "UserId", "dbo.AspNetUsers")
DropForeignKey("dbo.AspNetUserClaims", "UserId", "dbo.AspNetUsers")
DropForeignKey("dbo.AspNetUserRoles", "RoleId", "dbo.AspNetRoles")
DropIndex("dbo.AspNetUserLogins", New String() { "UserId" })
DropIndex("dbo.AspNetUserClaims", New String() { "UserId" })
DropIndex("dbo.AspNetUsers", "UserNameIndex")
DropIndex("dbo.AspNetUserRoles", New String() { "RoleId" })
DropIndex("dbo.AspNetUserRoles", New String() { "UserId" })
DropIndex("dbo.AspNetRoles", "RoleNameIndex")
DropTable("dbo.AspNetUserLogins")
DropTable("dbo.AspNetUserClaims")
DropTable("dbo.AspNetUsers")
DropTable("dbo.AspNetUserRoles")
DropTable("dbo.AspNetRoles")
End Sub
End Class
End Namespace
FirstName and LastName are not in "With" for the AspNetUsers table.
UPDATE:
I restarted again from scratch, and this time what I did was create the Migration, then manually added FirstName and LastName in the AspNetUsers Up function, then ran update-database. That actually worked.
So why it didn't automatically add those fields to the migration, I don't know. But if I do that manually it seems like it works that way.
Thank you!

add-migration "UserNames"andupdata-databaseneed to be called from the Package Manager window. Did you get any warnings or errors when you ran either of those commands?