web-dev-qa-db-ja.com

コードの最初の移行におけるupdate-databaseコマンドのエラー

私はWPFでデスクトップアプリケーションに取り組んでおり、データを格納するためにLocalDBを使用してSqlRepositoryを作成しています。次のツールを使用しています

  • Visual Studio 2013 Community with update 2
  • Entity Framework 6.1.2 for Code First Migration

Microsoft SQL Serverデータベースファイル(SqlClient)構成でローカルデータベースを作成しました。データベースが正常に作成され、以下はSQLからフェッチされた接続文字列です

Data Source=(LocalDB)\v11.0;Initial Catalog=D:\USERS\USERNAME\DOCUMENTS\TestDatabase\testdb.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False

App.configで同じ接続文字列を使用しています。 Visual StudioのSQL Serverデータベースエクスプローラーでデータベースオブジェクトを表示できます。しかし、nugetパッケージマネージャーコンソールでupdate-databaseコマンドを実行すると、以下のエラーが発生します。

SQL Serverへの接続を確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。 (プロバイダー:SQLネットワークインターフェイス、エラー:26-指定されたサーバー/インスタンスの検索エラー)

21
Nps

同様の問題があり、「スタートアッププロジェクト」を別のモジュールからソリューション内の他のすべてのプロジェクトへの参照を含むモジュールに変更したときに修正しました。モジュールを右クリック>>「スタートアッププロジェクトとして設定」をクリック

62
user2747855

ディエゴの答えは正しいです。

この問題は、スタートアッププロジェクトとしてマークされたプロジェクトに接続文字列がない場合に発生します。次に、EFはデフォルトのデータベースエンジンに接続して更新を実行しようとします。私の場合、エクスプレスを使用しようとしましたが、何らかの理由で接続できませんでした。そして、エラーがスローされました。

オプション「-Verbose」を指定して「update-database」を実行します。そこの行の1つは、使用されているStartUpプロジェクトを示しています。このプロジェクトの接続文字列を確認するか、スタートアッププロジェクトを正しい接続文字列を持つプロジェクトに変更してください。これで問題は解決しました。

8
Mikk

他の回答で説明されているように、問題は通常、パッケージマネージャーコンソールに間違った初期プロジェクトがあることが原因です。私の場合、コンソールはデフォルトプロジェクトのドロップダウンリストで選択した値と-StartUpProjectNameパラメータを無視し、Mikkの回答で説明されているように、デフォルトのデータベースエンジンに接続しようとするという間違った動作を再現していました。私の場合はSqlExpressエンジンを使用しています。

私の問題は、間違ったソリューション構成が原因で発生しました。ソリューションに複数のプロジェクトがあり、構成オプション「複数のスタートアッププロジェクト」で実行することを意図しているが、ソースコード管理リポジトリからダウンロードしただけの場合、デフォルトの構成オプション「単一のスタートアッププロジェクト」がソリューションに適用されています(この構成値は通常、ソースコード管理でチェックインされません)。この場合、パッケージマネージャーコンソールは、コンボで選択されたスタートアッププロジェクトを無視し、デフォルトのスタートアッププロジェクトをソリューションに適用します。これには、Mikkの回答で指定されている接続文字列がない可能性があります。

ソリューションのプロパティを変更して修正しました:Common properties/Startup project/Multiple startup projectsではなくSingle startup projectを選択すると、パッケージマネージャーコンソールがプロジェクト名を受け入れて更新します適切なデータベース。

4
Diana

この接続文字列で試してください:

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=D:\USERS\USERNAME\DOCUMENTS\TestDatabase\testdb.MDF;Initial Catalog=testdb;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
2
octavioccl

pdate-databaseコマンドにパラメーターを追加する でこれを解決することができました:

update-database -StartupProjectName MyApp.Web -ConnectionStringName MyAppConnectStringInWebConfig
2
Steve Greene

SQL Serverへの接続を確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。 (プロバイダー:SQLネットワークインターフェイス、エラー:26-指定されたサーバー/インスタンスの検索エラー)

このエラーメッセージは、SQL Serverに接続できないことを通知しています。考えられる理由とその排除について以下に説明します。

1)SQL Serverが起動していません。これを開始すると、使用可能なSQLサーバーのドロップダウンリストにSQLサーバー/インスタンスが表示されます。

  • [スタート]メニュー-> [コントロールパネル]-> [管理ツール]-> [サービス]に移動します。
  • サービスのリストでSQL Server(インスタンス名、デフォルトではEZPARTS5)を見つけ、そのステータスを確認します。開始されている必要があります。
    (開始されていない場合は、SQL Serverを右クリックして、
    コンテキストメニューから開始します)。

2)ファイアウォールがポート1433(接続用のMSSQL標準ポート)をブロックしている。以下の手順に従って無効にすることができます。

  • [スタート]メニュー-> [コントロールパネル]-> [管理ツール]-> [サービス]に移動します。
  • ファイアウォールサービスを検索し、無効にする必要があります(無効になっていない場合は、サービスを右クリックして、コンテキストメニューから[停止]を選択します)。

注:この詳細については、Microsoftの公式サイトをご覧ください。 Link

3)TCP/IPプロトコルは、MSSQLプロトコルでは無効です。これを有効にするには、以下の手順を参照してください。

  • [スタート]メニューの[SQL Server構成マネージャー]に移動します。
  • SQL Server構成マネージャーでTCP/IPプロトコルの設定を指定します。
  • コンピュータを再起動します。

注:この詳細については、Microsoftの公式サイトをご覧ください。 Link

4)リモート接続を受け入れるようにデータベースエンジンが構成されていることを確認します(集中データベースを使用している場合)。

  • SQL Server Management Studioを開きます。
  • SQL Serverインスタンスを右クリックし、[プロパティ]-> [接続]-> [このサーバーへのリモート接続を許可する]チェックボックスをオンにします。
  • [全般]セクションに移動し、[名前]フィールドで指定されたSQL Serverの名前を確認します。

5)名前付きSQL Serverインスタンスを使用している場合は、接続文字列でそのインスタンス名を使用していることを確認してください。通常、データベースサーバーの指定に必要な形式は、machinename\instancenameです。

6)ログインアカウントに、ログイン中に使用したデータベースへのアクセス権限があることを確認します。別の方法:それでも接続できない場合は、サーバー上にSQLアカウント、問題のデータベース上に対応するSQLユーザーを作成し、このユーザー名/パスワードのログインデータを使用してSQL Serverに接続することができます。

これから参照 link

1

LocaldbではなくSQL Serverに接続しようとしている場合は、web.configファイルのデフォルトの接続ファクトリが以下のようになっていることを確認してください。

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="Data Source=.\SQLEXPRESS2012; Integrated Security=True; MultipleActiveResultSets=True" />
  </parameters>
 </defaultConnectionFactory>
1

このエラーを解決して、初期プロジェクトをエンティティプロジェクトに変更しました。

見て:

Update-Database -Verbose StartUpプロジェクト 'SCVE.Web'を使用しています。 <-NuGetプロジェクト 'SCVE.EntityFramework'を使用したこのirエラー。

1
Diego

新しく作成したASP.NETプロジェクトでも同じ問題が発生しました。

まず、上記のようにスタートアッププロジェクトを設定してみました。スタートアッププロジェクトが選択されていなかったため、選択できませんでした。

最終的に、Visual Studioを2015 Update 1から2015 Update 3に更新し、

update-database

問題なく実行されました。

0
drsbee