質問: 私は最初にEFコードを使用する参照クラスライブラリを使用して、メインのWebアプリケーションプロジェクトを持っています。メインWebアプリケーションでは、いくつかの.edmxファイルもあります。これは、自動移行(MigrateDatabaseToLatestVersion)を使用した実データを含むプロダクションアプリです。 EF 5からEF 6にアップグレードしました。アップグレードの間にクラス/コンテキストの変更はありませんでした。私は単純に.edmxファイルをアップグレードして修正しました。コンパイル時エラーはありません。しかし、私は私の主なアプリを試してみると、私は次のエラーが表示されます: > 存在しないか、アクセス許可がないため、オブジェクト "dbo.FormItemResponseFormItemAnswers"が見つかりません。 > > 今私は自分のデータベースをダブルチェックし、テーブルは実際に存在し、ログインのために接続するためにアップグレード前と同じようにデータベースに対してdbo権限を持っている必要があります。だから私はなぜこのエラーが出るのか分かりません。何も変わっていません。スタックトレースは次のようになります。 > [SqlException(0x80131904): "dbo.FormItemResponseFormItemAnswers"オブジェクトが存在しないか、権限がないため、このオブジェクトを見つけることができません。] System.Data.SqlClient.SqlConnection.OnError(SqlException例外、ブールブレークコネクション、アクション`1 wrapCloseInAction) +1767866 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action` 1 wrapCloseInAction)+5352418 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj、Boolean callerHasConnectionLock、Boolean asyncClose)+244 System.Data.SqlClient.TdsParser System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName、Boolean async、Int32 timeout、Boolean asyncWrite)+869 System.Data(System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds); System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName、Boolean async、Int32 timeout、Boolean asyncWrite)。 .SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource `1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +410 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +160 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.b__0(DbCommand t, DbCommandInterceptionContext` 1 c) +36 System.Data.Entity.Infrastructure.Interception.InternalDispatcher `1.Dispatch(TTarget target, Func` 3操作、TInterceptionContext interceptionContext、 `3 executing, Action`アクション`3 executing, Action` 3)+138 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery (DbCommandコマンド、DbCommandInterceptionContext interceptionContext)+476 System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()+177 System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransactionトランザクション、MigrationStatement migrationStatement、DbInterceptionContext interceptionContext)+307 System.Data .Entity.Migrations.Infrastructure.MigratorBase.ExecuteSql(DbTransactionトランザクション、MigrationStatement migrationStatement、DbInterceptionCo `1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext) +110 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable` System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable `1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext) +110 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable` 1 migrationStatements、DbConnection接続)+799 System.Data.Entity.Migrations。>> c__DisplayClass30.b__2e()+66 System.Data.Entity.SqlServer。<> c__DisplayClass1.b__0()+34 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func `1 operation) +251 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) +196 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable` 1 migrationStatements、DbTransaction existingTransaction)+326 System.Data.Entity.Migrations.DbMigrator。 ExecuteStatements(IEnumerable `1 migrationStatements) +39 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable` 1 migrationStatements)+42 System.Data.Enti ty.Migrations.DbMigrator.ExecuteOperations(文字列migrationId、XDocument targetModel、IEnumerableを`1 operations, IEnumerable` 1 systemOperations、ブール格下げ、ブールオート)1335 System.Data.Entity.Migrations.DbMigrator.AutoMigrate(文字列migrationId、VersionedModel sourceModel、VersionedModel targetModel 、Booleanブレイクダウン)+1358 System.Data.Entity.Migrations.Infrastructure.MigratorBase.AutoMigrate(String migrationId、VersionedModel sourceModel、VersionedModel targetModel、Boolean downgrading)+64 System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable `1 pendingMigrations, String targetMigrationId, String lastMigrationId) +741 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable` 1 pendingMigrations、String targetMigrationId、String lastMigrationId)+59 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)+ 888 System.Data.Entity.Migrations。>> c__DisplayClassc.b__b()+38 System.Data.Entity.Migrations.DbMigrator.EnsureDataba System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)+42 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)+136 System.Data.Entity.Migrations .Infrastructure.MigratorBase.Update()+33 System.Data.Entity.MigrateDatabaseToLatestVersion `2.InitializeDatabase(TContext context) +154 System.Data.Entity.Internal.<>c__DisplayClassf` 1.b__e()+165 System.Data.Entity。 InternalContext.PerformInitializationAction(アクションアクション)+10 System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()+660 System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c)+31 System.Data.Entity.Internal .RetryAction `1.PerformAction(TInput input) +143 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action` 1アクション)+292 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()+123 System.Data.Entity。 Internal.InternalCon + 41 System.Data.Entity.Internal.Linq.InternalSet `1.Initialize() +137 System.Data.Entity.Internal.Linq.InternalSet` 1.get_InternalContext()+ 38 System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider()+ `1.System.Linq.IQueryable.get_Provider() +99 System.Linq.Queryable.Where(IQueryable` 1ソース、Expression`1述語)+ 63 > > 私はこの問題で他の誰かを見つけられませんでした。誰かが光を当てることはできますか?私は何をすべきかわからないし、通常のgoogleはほとんどEFとの関係がないSQLエラーを明らかにする。 コンテキスト/オブジェクト内の何も変更されておらず、データベースに手動で変更が加えられていませんでした。私は私のソースコントロールをダブルチェックしました。私は、それが移行を実行しようとしているかどうかをスタックトレースから知ることはできませんが、私は自動移行を使用しています。何も変更されていないため、移行を試みるべきではありません。 編集:_MigrationHistoryテーブルがEFバージョン番号を格納し、すべての鉱山は現在5.0.0.net45です知っています。 v6の新しい移行履歴レコードを作成しようとしている可能性はありますか?しかし、再び、文脈の変更はありません。私はそれが何をそのテーブルでどうしようとしているのか分かりません。
回答: 自動移行は、テスト/開発の外では使用されていないはずです。実際の本番データベースではなく、本番のようなコピーやクローンに対しても、アップグレードプロセスを実行する必要があります。自動移行を無効にし、 `>Add-Migration` 、 `>Update-Database`を使用して通常の移行を強制すると、この問題が解決する可能性があります。