web-dev-qa-db-ja.com

EF5:ファイル '{0}'をデータベース '{1}'として添付できません

here (「削除されたMDFファイルに添付できません」セクションを読んでください)のように正確な問題が発生していますが、問題の解決策はそこに記載されていません...

要するに、.mdfファイルを削除した後、EF 5.0を使用してDBにアクセスしようとすると、次の例外がスローされるという問題です。

DataException-> EntityException-> SqlException:
データベース「{1}」としてファイル「{0}」を添付できません

DBファイルを削除しましたが、アプリケーションを実行してイニシャライザを使用することを期待しているときに、厄介なエラーメッセージが表示されるようになりました。これを修正する方法はありますか?

140
Shimmy

DBファイルを削除しても、SqlLocalDBに登録されたままになります。 DBを削除するように修正することもあります。これはコマンドラインから実行できます。

  1. スタート/プログラムメニューの下にある[VisualStudioの開発者コマンドプロンプト]を開きます。
  2. 次のコマンドを実行します。

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

220
CodingWithSpike

まだ解決策を探している人のために...

[表示]/[SQL Serverオブジェクトエクスプローラー]に移動し、(localdb)\ v11.0サブノードからデータベースを削除します!
enter image description here

基本的に、ファイルがある場所のローカルデータベースが保持されます。データベースファイルを削除する場合は、手動ではなく、このエクスプローラユーティリティから削除してください。

146
JSobell

最初にJSobellのソリューションを試しましたが、データベースがリストされていませんでした。 VS Developer Command PromptからCodingWithSpikeのコマンドを実行しましたが、それも機能しませんでした。最後に、パッケージマネージャーコンソールからCodingWithSpikeの同じコマンドを実行しましたが、動作しました。

    PM> sqllocaldb.exe stop v11.0
    LocalDB instance "v11.0" stopped.

    PM> 
    PM> sqllocaldb.exe delete v11.0
    LocalDB instance "v11.0" deleted.

    PM> sqllocaldb.exe start v11.0
    LocalDB instance "v11.0" started.
19
AJs

わかった。

私の解決策は簡単で、ローカルサーバーを使用するように変更しました。

接続文字列のDataSource属性を次から変更しました:

Data Source=(LocalDb)\v11.0;blah

に:

Data Source=.\SQLEXPRESS;blah

別の解決策は、SQL Management Studioを介してLocalDbにログインし、そのデータベースを削除しようとすることです。

enter image description here

しかし、私にとってはうまくいきませんでした。削除しようとすると、「タイトル:Microsoft SQL Server Management Studio

データベース '{0}'はサーバーに存在しません。 (SqlManagerUI)

データベースをデタッチしようとすると、デタッチの選択リストにデータベースが表示されません。「オフラインにする」でも上記のエラーが表示されます。

これは、これがLocalDBの強固なバグだと思うようになります。

9
Shimmy

最も簡単な解決策は、接続文字列でDBの名前を変更するだけです。代替ソリューションについては、Rowan Millersブログ Visual Studio 2012からデータベースを削除する方法 を参照してください。この問題は将来のエディションで修正する予定です。

4
RickAndMSFT

私が今それを解決したばかりの最良かつ簡単な答え、データソースとしてSQLサーバー名を使用し、初期カタログをデータベース名にして、mdf行を削除します

2
gifted

SQL 2014の場合、CodingWithSpikeの選択された回答とこのコメントに従ってください

補足として、v11.0はSQL LocalDB 2012に固有です。LocalDB2014を使用している場合、MSは名前をMSSqlLocalDbに変更しました。 -CodingWithSpike 14年8月29日19:20に

1
The One

私の場合、移行を使用し、configでdataContextとdataContextクラス自体の名前を変更し(名前を変更するだけ)、もう一度試してみてください

1
no0bassss

同じ問題がありました。パッケージマネージャーコンソールで次のコマンドを実行し、問題を修正しました

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
0
Tony Newsom

私も同じ問題を抱えていたので、「DataDirectory」フォルダーをアプリのバイナリーの別のフォルダーに手動で設定することで解決しました。

Global.asax Application_Startメソッドに次の行を追加します。

AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));

現在、接続文字列は次のように設定されています。

<connectionStrings>
    <add name="DataContext" connectionString="Data Source=(LocalDb)\v11.0; Initial Catalog=DataContext; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|DataContext.mdf"
  providerName="System.Data.SqlClient" />
0
Filipe Scur

接続文字列のデータベース名をデフォルトのaspnet- {numbers}から単純な名前に変更することで修正できました。

0
Edgar Salazar

SQL Server Management Studioを使用して(LocalDb)\ v11.0に接続し、dbを削除してから、パッケージマネージャーコンソールでデータベースの更新を実行します。

0
Nidhin