重要:一般的な原因を指摘する前に、接続文字列はローカルマシンの1つのプロジェクトで機能しますが、同じデータベースの同じローカルインスタンスに接続している同じローカルマシンの別のプロジェクトでは機能しません。
奇妙な問題が発生しています。私は2つのEFコアプロジェクトを持っています。最初のプロジェクトの接続文字列は完全に機能します。 「dotnetefdatabase update」と入力すると、移行がLOCALデータベースにプッシュされます。以下の文字列を2番目のプロジェクトに正確にコピーして貼り付けましたが、エラーがスローされます。
SQL Serverへの接続の確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、およびSQLServerがリモート接続を許可するように構成されていることを確認してください。 (プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開くことができませんでした)
これが私の接続文字列です:
Server=.;Database=RAMSAPPDB;Integrated Security=False;Persist Security Info=True;MultipleActiveResultSets=True;
同じデータベースに追加しようとする他のプロジェクトでこの接続文字列を使用すると、このエラーがスローされる理由は1つも考えられません。 2番目のプロジェクトで移行をプッシュする前に、RAMSAPPDB内のすべてのテーブルを削除しようとしましたが、機能しません。
「ConnectionString」をコメントアウトすると、エラーが発生します
connectionStringを空白にすることはできません
appsettings.json
で接続文字列を使用していることがわかります。
考えられる原因についてのアイデアをいただければ幸いです。ありがとうございました。
これは、開発モードのときにappsettings.jsonファイルが原因で発生することがある問題です。その場合は、appsettings.Development.jsonファイルを探して、そこで変更を行う必要があります。
Visual Studioを使用していて、関連するファイルのネストが有効になっている場合は、appsettings.jsonの横にある矢印をクリックしてappsettings.Development.jsonにアクセスするか、appsettings.jsonを開いてタイトルバーを右クリックし、[含むフォルダーを開く]を選択します。 。 appsettings.Development.jsonがそこにあるはずです。接続文字列を希望どおりに変更すれば、準備は完了です。
私はそれを解決しました。私はずっと前にこれを書いていて、それを忘れていました
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=.\\SQLEXPRESS;Database=MYDB;Integrated Security=True;MultipleActiveResultSets=True;");
}
「dotnetefdatabase update」コマンドを実行したときに、DbContextクラスで使用されていました。 appsettings.jsonにあるものを使用していると思いました。
私のconnectionStringがコピーされ、EntityFrameworkのスキャフォールディングされたDbContextを使用してハードコードされました。これが、私のアプリがappsettings.jsonのconnectionStringを使用していなかった理由です。