私は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
ConnectionString
、ConnectionProviderName
をパッケージマネージャーコンソールで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>
誰が問題がどこにあるか知っていますか?
ようやく問題が見つかりました! Mohamad Bataineh が this thread で述べたように(回答を参照)
DbContextクラスでは、SQLソースに適切な名前で基本クラスコンストラクターを指定する必要があります。たとえば、name = MyDBEntities
他の言葉では、既存のdbcontextのコンストラクターを変更しました
public MyDbContext()
{
}
に
public MyDbContext(): base("name=ERPContext")
{
}
この問題を解決するために、デフォルトのプロジェクトをapp.config
適切な接続文字列が含まれています。
これは、システムがnoneの移行の適用を検出したため、明白であるはずです-DBが見つからなかったことの明らかな兆候、接続文字列が見つからなかったことの明らかな理由(OPが完了したとき)。
「後知恵は20/20」。
このエラーも発生していました。既定のプロジェクトを正しく設定することに加え(ANevesで言及)、ソリューションエクスプローラーでスタートアッププロジェクトとして接続文字列を使用してプロジェクトを設定する必要もありました。これらの両方を正しく設定して初めて、エラーは解消しました。
(ソリューションエクスプローラーの)Migrationsフォルダーで対応する移行を削除し、新しい移行を追加して、最後にデータベースを更新することで、メッセージを取り除くことができました。
エラーを表示してデータベースを更新しない移行フォルダからその移行を削除するだけです。次に、もう一度移行を追加します。それが動作します。
私の場合、ワークステーションのIPアドレスがSQL Serverのファイアウォール例外に追加されていません。