here (「削除されたMDFファイルに添付できません」セクションを読んでください)のように正確な問題が発生していますが、問題の解決策はそこに記載されていません...
要するに、.mdf
ファイルを削除した後、EF 5.0を使用してDBにアクセスしようとすると、次の例外がスローされるという問題です。
DataException-> EntityException-> SqlException:
データベース「{1}」としてファイル「{0}」を添付できません
DBファイルを削除しましたが、アプリケーションを実行してイニシャライザを使用することを期待しているときに、厄介なエラーメッセージが表示されるようになりました。これを修正する方法はありますか?
DBファイルを削除しても、SqlLocalDBに登録されたままになります。 DBを削除するように修正することもあります。これはコマンドラインから実行できます。
次のコマンドを実行します。
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
まだ解決策を探している人のために...
[表示]/[SQL Serverオブジェクトエクスプローラー]に移動し、(localdb)\ v11.0サブノードからデータベースを削除します!
基本的に、ファイルがある場所のローカルデータベースが保持されます。データベースファイルを削除する場合は、手動ではなく、このエクスプローラユーティリティから削除してください。
最初に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.
わかった。
私の解決策は簡単で、ローカルサーバーを使用するように変更しました。
接続文字列のDataSource
属性を次から変更しました:
Data Source=(LocalDb)\v11.0;blah
に:
Data Source=.\SQLEXPRESS;blah
別の解決策は、SQL Management Studioを介してLocalDbにログインし、そのデータベースを削除しようとすることです。
しかし、私にとってはうまくいきませんでした。削除しようとすると、「タイトル:Microsoft SQL Server Management Studio
データベース '{0}'はサーバーに存在しません。 (SqlManagerUI)
データベースをデタッチしようとすると、デタッチの選択リストにデータベースが表示されません。「オフラインにする」でも上記のエラーが表示されます。
これは、これがLocalDBの強固なバグだと思うようになります。
最も簡単な解決策は、接続文字列でDBの名前を変更するだけです。代替ソリューションについては、Rowan Millersブログ Visual Studio 2012からデータベースを削除する方法 を参照してください。この問題は将来のエディションで修正する予定です。
私が今それを解決したばかりの最良かつ簡単な答え、データソースとしてSQLサーバー名を使用し、初期カタログをデータベース名にして、mdf行を削除します
SQL 2014の場合、CodingWithSpikeの選択された回答とこのコメントに従ってください
補足として、v11.0はSQL LocalDB 2012に固有です。LocalDB2014を使用している場合、MSは名前をMSSqlLocalDbに変更しました。 -CodingWithSpike 14年8月29日19:20に
私の場合、移行を使用し、configでdataContextとdataContextクラス自体の名前を変更し(名前を変更するだけ)、もう一度試してみてください
同じ問題がありました。パッケージマネージャーコンソールで次のコマンドを実行し、問題を修正しました
sqllocaldb.exe stop MSSqlLocalDb
sqllocaldb.exe delete MSSqlLocalDb
私も同じ問題を抱えていたので、「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" />
接続文字列のデータベース名をデフォルトのaspnet- {numbers}から単純な名前に変更することで修正できました。
SQL Server Management Studioを使用して(LocalDb)\ v11.0に接続し、dbを削除してから、パッケージマネージャーコンソールでデータベースの更新を実行します。