10

Entity Frameworkをバージョン6.0.0-alpha1に更新した後、データベースを更新できません。 これは私が取得していますエラーです:EF 6.0.0-alphaにアップデートした後にEF移行を使用してデータベースを更新できません

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. 

これの原因は何ですか?私は 'PK_dbo .__ MigrationHistory'のためのsysobjectsテーブルを照会しましたが、それは存在しません。

ありがとうございます。

答えて

11

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) 

これ以降はエラーなしでupdate-databaseを使用しました。

+0

ありがとうございました。私の一日を保存しました – HassanBakri

+0

次回の移行では、今後問題が発生します。 PKは '[MigrationId]'と '[ContextKey]'を含むクラスタ化されている必要があります。 PK制約は次のようになります。 'CONSTRAINT [PK_dbo .__ MigrationHistory] ​​PRIMARY KEY CLUSTERED([MigrationId] ASC、[ContextKey] ASC)' – skyfrog

関連する問題