web-dev-qa-db-ja.com

次の明示的な移行が保留中のため、明示的な移行を生成できません

私はEF 6.1を使用していて、プロジェクトでコードの最初の移行を有効にしています

Enable-Migrations
Add-Migration InitializeDb -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"
Update-Database  -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" -verbose -script

ConnectionStringConnectionProviderNameをパッケージマネージャーコンソールでAdd-MigrationおよびUpdate-databaseで明示的に指定すると、正しく機能します。

Add-migration updateXtable -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"

しかし、追加情報なしでAdd-Migrationを使用すると:

add-migration updateXtable

次のエラーが発生します。

次の明示的な移行が保留中のため、明示的な移行を生成できません:[201408300955376_InitializeDb、201408311028404_Test]。新しい明示的な移行を生成する前に、保留中の明示的な移行を適用します。

したがって、データベースを更新する必要があるたびに、次のコマンドを使用する必要があります。

Add-Migration UpdateXTable -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"
Update-Database  -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" -verbose -script

それは私のプロジェクトです(私のDbContextを含む)app.configファイル:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
 <entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory,  EntityFramework" />
 <providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
 </providers>
 </entityFramework>
 <connectionStrings>
 <add name="ERPContext" connectionString="Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" providerName="System.Data.SqlClient" />
 </connectionStrings>

 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
 </startup>   
</configuration>

誰が問題がどこにあるか知っていますか?

11
Masoud

ようやく問題が見つかりました! Mohamad Batainehthis thread で述べたように(回答を参照)

DbContextクラスでは、SQLソースに適切な名前で基本クラスコンストラクターを指定する必要があります。たとえば、name = MyDBEntities

他の言葉では、既存のdbcontextのコンストラクターを変更しました

public MyDbContext()
{
} 

public MyDbContext(): base("name=ERPContext")
{
} 
3
Masoud

この問題を解決するために、デフォルトのプロジェクトをapp.config適切な接続文字列が含まれています。

これは、システムがnoneの移行の適用を検出したため、明白であるはずです-DBが見つからなかったことの明らかな兆候、接続文字列が見つからなかったことの明らかな理由(OPが完了したとき)。

「後知恵は20/20」。

22
ANeves

このエラーも発生していました。既定のプロジェクトを正しく設定することに加え(ANevesで言及)、ソリューションエクスプローラーでスタートアッププロジェクトとして接続文字列を使用してプロジェクトを設定する必要もありました。これらの両方を正しく設定して初めて、エラーは解消しました。

3
jaycer

(ソリューションエクスプローラーの)Migrationsフォルダーで対応する移行を削除し、新しい移行を追加して、最後にデータベースを更新することで、メッセージを取り除くことができました。

1
Weapon X

エラーを表示してデータベースを更新しない移行フォルダからその移行を削除するだけです。次に、もう一度移行を追加します。それが動作します。

1
Tariqul Shakil

私の場合、ワークステーションのIPアドレスがSQL Serverのファイアウォール例外に追加されていません。

0
Thom Hubers