If migrations are created in EF5, then the application is upgraded to EF6, reverts back to the migrations created in EF5 will break migrations history. Attached is program.cs which is constant throughout the entire migrations process.
Note: Update-Database migrates up and down correctly on all migrations created after the upgrade
Repro:
In console app with simple model and EF5 installed:
Enable-Migrations
Add-Migration
Update-Database
Upgrade to EF6
Add property to Comment.cs
Add-Migration m0
Update-Database
Run
Update-Database -TargetMigration 0
Run
Update-Database -TargetMigration m0
-- ERROR: "There is already an object named 'Posts' in the database."
Comments: This doesn't appear to be about upgrading EF versions, but rather doing something like this: * Create a project with Migrations enabled and update database to latest version * Revert database back to "empty" with Update-Database -TargetMigration 0 * Run the app--the initializer will now create the database <-- This appears to be the critical step * Attempt to use Migrations to bring the database back to where it was before using Migrations with Update-Database again So repro is, with any simple app: * Install EF6 * Enable-Migrations * Add-Migration First * Update-Database * Update-Database -TargetMigration 0 * Run app * Update-Database -TargetMigration First Exception and trace: ``` PM> Update-Database -TargetMigration First Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Applying explicit migrations: [201303090213315_First]. Applying explicit migration: 201303090213315_First. System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'Blogs' 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& 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.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection) at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass4c.<ExecuteStatements>b__48() at System.Data.Entity.Infrastructure.ExecutionStrategy.<>c__DisplayClass1.<Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.ProtectedExecute[TResult](Func`1 func) at System.Data.Entity.Infrastructure.ExecutionStrategy.Execute[TResult](Func`1 func) at System.Data.Entity.Infrastructure.ExecutionStrategy.Execute(Action action) 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.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration) 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.UpdateInternal(String targetMigration) at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass19.<Update>b__18() at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 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:52b0e85b-e5d6-42e3-b598-b1fe830dcec1 There is already an object named 'Blogs' in the database. PM> ```
Note: Update-Database migrates up and down correctly on all migrations created after the upgrade
Repro:
In console app with simple model and EF5 installed:
Enable-Migrations
Add-Migration
Update-Database
Upgrade to EF6
Add property to Comment.cs
Add-Migration m0
Update-Database
Run
Update-Database -TargetMigration 0
Run
Update-Database -TargetMigration m0
-- ERROR: "There is already an object named 'Posts' in the database."
Comments: This doesn't appear to be about upgrading EF versions, but rather doing something like this: * Create a project with Migrations enabled and update database to latest version * Revert database back to "empty" with Update-Database -TargetMigration 0 * Run the app--the initializer will now create the database <-- This appears to be the critical step * Attempt to use Migrations to bring the database back to where it was before using Migrations with Update-Database again So repro is, with any simple app: * Install EF6 * Enable-Migrations * Add-Migration First * Update-Database * Update-Database -TargetMigration 0 * Run app * Update-Database -TargetMigration First Exception and trace: ``` PM> Update-Database -TargetMigration First Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Applying explicit migrations: [201303090213315_First]. Applying explicit migration: 201303090213315_First. System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'Blogs' 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& 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.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection) at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass4c.<ExecuteStatements>b__48() at System.Data.Entity.Infrastructure.ExecutionStrategy.<>c__DisplayClass1.<Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.ProtectedExecute[TResult](Func`1 func) at System.Data.Entity.Infrastructure.ExecutionStrategy.Execute[TResult](Func`1 func) at System.Data.Entity.Infrastructure.ExecutionStrategy.Execute(Action action) 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.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration) 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.UpdateInternal(String targetMigration) at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass19.<Update>b__18() at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 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:52b0e85b-e5d6-42e3-b598-b1fe830dcec1 There is already an object named 'Blogs' in the database. PM> ```