新しい移行を追加していますが、このメッセージは次のことを示しています。
次の明示的な移行が保留中のため、明示的な移行を生成できません:[201203170856167_left]。新しい明示的な移行を生成する前に、保留中の明示的な移行を適用します。
誰も私を助けることができますか?
新しい移行を追加していますが、このメッセージは次のことを示しています。
次の明示的な移行が保留中のため、明示的な移行を生成できません:[201203170856167_left]。新しい明示的な移行を生成する前に、保留中の明示的な移行を適用します。
誰も私を助けることができますか?
回答:
これは、アプリケーションに未処理の移行がいくつかありUpdate-Database
、別の移行を追加する前に実行する必要があることを示しています。
-StartupProject ContentHub.Database
Update-Database
>保留中の変更があるため、現在のモデルに一致するようにデータベースを更新できません
私も同じ問題を抱えていました。どうやらエンティティフレームワークは、データベースに接続できないときにこのエラーを生成します。他の問題を検索する前に、アクセスできることを確認してください。
パッケージマネージャーコンソールから「update-database」を実行して変更をデータベースにプッシュするか、またはMigrationsフォルダーから保留中の移行ファイル([201203170856167_left])を削除してから、「add-migration」を再実行して編集に基づいて新しい移行を作成します。
このエラーは、移行が認識されなくなったことも意味します。これは、Migrations.ConfigurationのContextKeyの値を変更した後に発生しました。解決策は、データベーステーブル "__MigrationHistory"のContextKeyを更新することです(または、Configurationクラスの値を元に戻します)。アプリケーションのContextKeyと名前空間は一致する必要があります。
接続文字列をもう一度確認してください。
接続先のユーザーに、引き続き読み取り[__MigrationHistory]
権限があり、スキーマを編集する権限があることを確認してください。
アプリケーションまたはWeb構成ファイルの接続文字列を変更して、統合セキュリティ(Windows Auth)を使用してadd-migrationコマンドを自分で実行することもできます。
例えば:
connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;"
この接続文字列は、DbContextが配置されているプロジェクトのApp.configファイルに含まれます。
コマンドラインでStartUpプロジェクトを指定するか、またはMigrationsフォルダーでプロジェクトを右クリックしてDbContext
、Configuration
[ Set up StartUp project ]を選択します。私は真剣です、これは実際に役立ちます。
Integrated Security
修正はうまくいきます!
同じ問題があり、上記の回答からいくつかのヒントで解決することができました:
パッケージマネージャコンソールで "update-database -verbose"を使用して、移行が接続しようとする場所に関するより具体的な情報を取得します。(私の場合、私の起動プロジェクトが正しく設定されていないことがわかりました...)
使用していないUpdate-Database
場合は、削除してください。更新を実行した場合は、次を使用してロールバックしますUpdate-Database -TargetMigration "NameOfPreviousMigration"
、から削除します。
リファレンス:http : //elegantcode.com/2012/04/12/entity-framework-migrations-tips/
このテキストをここから直接コピーしました。最後のAdd-Migrationコマンドを元に戻すにはどうすればよいですか?
この問題が発生した場合は、add-migrationコマンドレットにパラメーターを追加してみてください。たとえば、起動プロジェクトと接続文字列名を指定すると、EFがターゲットデータベースを見つけるのに役立ちます。
add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL
どこ:
Delta_Defect_0973は移行の名前です
your.namespace.ContextClassNameは、完全な名前空間を前に付けた、移行フォルダー内の構成クラスの名前です。
DeltaProjectは、web.configまたはapp.configファイルを含むメインプロジェクトの名前です。
DeltaSQLは、web.configまたはapp.configファイルで定義された接続文字列の名前です。
ちょうど私の2セント:
私のシナリオ:
解決:
これを回避するために、より明示的なパラメーターを提供しました:
Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose
app.configフォルダーで設定を設定して、この動作をデフォルトにできるため、毎回明示的なパラメーターを指定する必要がないと私は信じています。ただし、これを行う方法についてはわかりません。
-ConnectionStringName
これは別の方法であり、接続文字列を構成から名前でプルします
あいまいさがあるため、エラーが発生します。最善の方法は、現在の移行ファイルを除外して新しい移行(add-migration)ファイルを作成し、新しい移行の内容を除外されたファイルにコピーして再度含め、update-databaseコマンドを実行することです。
update-database
コマンドを実行した後、コマンドを再試行し、add-migration
それが機能しました
私はこのような同じ問題を解決しました:
ヒント:-Script
わからない場合は、移行コマンドにスイッチを使用することをお勧めします。また、実際に何Update-Database
が行われているかを理解するのにも役立ちます。
次のコマンドを実行してデータベースを更新し、手動で適用できるスクリプトを取得します(または、-Scriptタグなしでもう一度実行します)。
以下のためにUpdate-Database
私は次のことを実行します:
Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive
SQL_AzureLive
私の設定の名前付き接続文字列はどこですか?
次に、SQLが正しく表示されていることを確認し、適用して完了します。他の多くの人が接続文字列が間違っているか無効であると言ったように、このエラーが発生します。
私にとって、私はMigrations
フォルダーから移行ファイル(あなたの場合は "201203170856167_left")を削除し、次にパッケージマネージャーコンソールで以下のコマンドを実行しました
Add-Migration <Parameter>
Update-Database
シナリオ
問題
マスターから更新した後、「Add-Migration my_migration_name」を実行しましたが、次のエラーが発生します。
次の明示的な移行が保留中のため、明示的な移行を生成できません:[201607181944091_AddExternalEmailActivity]。新しい明示的な移行を生成する前に、保留中の明示的な移行を適用します。
そのため、 "Update-Database"を実行すると、次のエラーが発生します。
保留中の変更があり、自動移行が無効になっているため、現在のモデルに一致するようにデータベースを更新できません
解決
この時点で、「Add-Migration my_migration_name」を再実行すると問題が解決しました。私の理論では、「Update-Database」を実行すると、「Add-Migration」が機能するために必要なすべての状態が得られます。
Add-Migrationを実行したときに最新であることがわかっていたデータベースについても、この問題が発生しました。Add-Migrationコマンドをもう一度実行するだけで解決します。上記のRobin Dorbellが示唆しているように、接続の問題を疑います。
私は別の方法でやった。データベースを完全に削除し、vs。でもう一度「update-database」を実行しました。
もっと簡単な問題がありました。ワークステーションに接続されたクライアントのサイトへのVPN接続があると、VSはこのエラーを誤って報告しました。問題は、DBMSセキュリティが実際のローカルIPからの要求のみを受け入れるように設定されていることでした。VPNをオフにするだけで問題は解決しました。
これは多くの人にとっての答えにはなりませんが、EFはDBに接続できないときにこのエラーを解消します。私のように自宅で仕事をしている場合は、VPNに接続されていることを確認してください。
私の場合(MS Visual Studioを使用)、Visual Studioを再起動するのと同じくらい簡単でした。