Подтвердить что ты не робот

Невозможно обновить базу данных с помощью EF Migrations после обновления до EF 6.0.0-alpha

После обновления моей Entity Framework до версии 6.0.0-alpha1 я не могу обновить базу данных. Это ошибка, которую я получаю:

PM> update-database -verbose
Using StartUp project 'DataCenter'.
Using NuGet project 'DataCenter.Domain'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'datacenter' (DataSource: ., Provider: System.Data.SqlClient, Origin: Configuration).
Upgrading history table.
ALTER TABLE [dbo].[__MigrationHistory] ADD [ContextKey] [nvarchar](512) NOT NULL DEFAULT 'DataCenter.Domain.Migrations.Configuration'
ALTER TABLE [dbo].[__MigrationHistory] DROP CONSTRAINT [PK_dbo.__MigrationHistory]
System.Data.SqlClient.SqlException (0x80131904): 'PK_dbo.__MigrationHistory' is not a constraint.
Could not drop constraint. See previous errors.
   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.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.DbMigrator.UpgradeHistory(IEnumerable`1 upgradeOperations)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.UpgradeHistory(IEnumerable`1 upgradeOperations)
   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:eda1a366-d3c8-44de-8cc9-8f64e2511b4e
'PK_dbo.__MigrationHistory' is not a constraint.
Could not drop constraint. See previous errors.

В чем причина этого? Я запросил таблицу sysobjects для "PK_dbo.__ MigrationHistory", но этого не существует. любая идея?

Спасибо заранее.

4b9b3361

Ответ 1

OK. Я нашел решение. Похоже, что EF ожидает, что ограничение первичного ключа таблицы __MigrationHistory будет иметь имя PK_dbo.__MigrationHistory. но это PK___MigrationHistory.

Итак, следующие тэги sql будут делать трюк.

ALTER TABLE __MigrationHistory
drop CONSTRAINT PK___MigrationHistory
ALTER TABLE __MigrationHistory
ADD CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY (MigrationId)

после этого я использовал базу данных обновлений без ошибок.