title: Automatic Migrations for ASP.NET SimpleMembershipProvider
body: <p>So I tried to use automatic migrations with my new MVC 4 Project but somehow it isn't working. I <a href="http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/">followed this blog post</a> step by step.</p>
  
  <p>I've added the changes to the <code>UserProfile</code> account model (the <code>NotaryCode</code> field): </p>
  
  <pre><code>[Table("UserProfile")]
  public class UserProfile
  {
      [Key]
      [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
      public int UserId { get; set; }
      public string UserName { get; set; }
      public int NotaryCode { get; set; }
  }
  </code></pre>
  
  <p>Then I wrote on the package manager console <code>enable-migrations</code> and a Configuration class appeared (inherits from <code>DbMigrationsConfiguration&lt;Web.Models.UsersContext&gt;</code>) then I fill the class as:</p>
  
  <pre><code>public Configuration()
  {
      AutomaticMigrationsEnabled = true;
  }
  
  protected override void Seed(Atomic.Vesper.Cloud.Web.Models.UsersContext context)
  {
      WebSecurity.InitializeDatabaseConnection(
              "DefaultConnection",
              "UserProfile",
              "UserId",
              "UserName", autoCreateTables: true);
  
      if (!Roles.RoleExists("Atomic"))
          Roles.CreateRole("Atomic");
  
      if (!Roles.RoleExists("Protocolista"))
          Roles.CreateRole("Protocolista");
  
      if (!Roles.RoleExists("Cliente"))
          Roles.CreateRole("Cliente");
  
      string adminUser = "randolf";
  
      if (!WebSecurity.UserExists(adminUser))
          WebSecurity.CreateUserAndAccount(
              adminUser,
              "12345",
              new { NotaryCode = -1 });
  
      if (!Roles.GetRolesForUser(adminUser).Contains("Atomic"))
          Roles.AddUsersToRoles(new[] { adminUser }, new[] { "Atomic" });
  }
  </code></pre>
  
  <p>And then I tried to run <code>update-database -verbose</code> but this doesn't work. I mean, this is the output:</p>
  
  <p><strong>There is already an object named 'UserProfile' in the database.</strong></p>
  
  <pre><code>PM&gt; update-database -verbose
  Using StartUp project 'Web'.
  Using NuGet project 'Web'.
  Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
  Target database is: 'VesperCloud' (DataSource: .\SQLSERVER, Provider: System.Data.SqlClient, Origin: Configuration).
  No pending code-based migrations.
  Applying automatic migration: 201211051825098_AutomaticMigration.
  CREATE TABLE [dbo].[UserProfile] (
      [UserId] [int] NOT NULL IDENTITY,
      [UserName] [nvarchar](max),
      [NotaryCode] [int] NOT NULL,
      CONSTRAINT [PK_dbo.UserProfile] PRIMARY KEY ([UserId])
  )
  System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'UserProfile' in the database.
     at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
     at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean&amp; dataReady)
     at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout)
     at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
     at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
     at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
     at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
     at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
     at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
     at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, Boolean downgrading, Boolean auto)
     at System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, XDocument sourceModel, XDocument targetModel, Boolean downgrading)
     at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, XDocument sourceModel, XDocument targetModel, Boolean downgrading)
     at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
     at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
     at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
     at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
     at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
     at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
  ClientConnectionId:a7da0ddb-bccf-490f-bc1e-ecd2eb4eab04
  **There is already an object named 'UserProfile' in the database.**
  </code></pre>
  
  <p>I know the object exists. I mean, I'm try to use automatic-migrations to, precisely, modify and run without recreating manually the DB. But somehow this isn't working.</p>
  
  <p>I look the MSDN documentation and found the property:</p>
  
  <pre><code>AutomaticMigrationDataLossAllowed = true;
  </code></pre>
  
  <p>But setting it to true doesn't change anything. I guess I'm missing something but somehow doesn't find what. Any idea?</p>