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


140

ここで説明されているとおりの問題が発生していますとおり(「削除されたMDFファイルに添付できない」セクションを参照)が、問題の解決策がそこに記載されていません...

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

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

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


1
申し訳ありませんが、具体的な回答は提供していませんが、当時は100%機能するソリューションがありませんでした。ユーザーが接続したデータベースを使用しないことで、エラーを回避しようとしています。通常、SQL Server Management Studioに接続し、エラーのデータベースを切り離すことで、エラーを修正できます。
OdeToCode

問題は、すでに物理ファイルを削除しているため、データベースが存在しないことです。実際に、スタジオの1つ(VSと外部に統合されている)でそれを管理しようとしました。私の答えは実際には解決策ではなく回避策です。LocalDbに固執する必要がないことを示しているだけです。
Shimmy Weitzhandler

EFエキスパートのRowan Millerから-romiller.com/2013/05/17/を参照してください次のVSバージョンでより良いソリューションを提供したいと考えています。
RickAndMSFT 2013

便利なトラブルシューティングガイド:odetocode.com/blogs/scott/archive/2012/08/15/...
ティム・アベル

回答:


220

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

  1. スタート/プログラムメニューから「Developer Command Propmpt for VisualStudio」を開きます。
  2. 次のコマンドを実行します。

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0


1
SQL Serverオブジェクトエクスプローラーが見つかりませんでした。VS2012 Expressを使用しているためです。だから、私は受け入れられた答えを試すことができません。しかし、あなたの答えは私にとっては完璧に機能しました。ありがとう。
ニューマン2013

3
あなたの答えは私を救った。受け入れられた回答から(localdb)\ v11.0サブノードがなく、SQL Management Studioから参照を削除できなかったので、お急ぎください!
Santux 2013

18
ファイルを削除した後、これは私のために働きました。ツール->ライブラリパッケージマネージャー->パッケージマネージャーコンソールからコマンドを実行することもできます。
Bart Verkoeijen 2013年

11
補足として、これはv11.0SQL LocalDB 2012に固有です。LocalDB2014を使用している場合、MSはその名前をMSSqlLocalDb代わりにに変更しました。
CodingWithSpike 2014

4
上記のコメントに関連して、db名を入力することもできません。デフォルトの名前に適用されます。vs2015で以下を使用しましたが、機能しました。sqllocaldb.exestop sqllocaldb.exe delete
Deviney

147

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

ビュー/ SQL Serverオブジェクトエクスプローラーに移動し、(localdb)\ v11.0サブノードからデータベースを削除します!
ここに画像の説明を入力してください

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


これは私を1回噛みました。2回目は、自動マイグレーションがあったことです== false FML
workabyte

8
また、表示されない場合。新しい接続を追加し、「(localdb)\ v11.0」と入力します(Windows認証を使用)。シンプルに見えるかもしれませんが、しばらく画面を見つめていました。:)
ピーター

@Peter Ok、データベースを追加して、2つのコンテキストが表示されるようになりました。このビューから削除すると、「このデータベースのデータアクセスレベルを取得できません」という新しいエラーが発生します。コマンドプロンプトを使用してこれを回避することができました。
nVentimiglia 2014年

1
EF6のデフォルトの接続ファクトリを使用する場合、代わりにmssqllocaldbを使用している可能性があります。サーバーを(LocalDb)\ mssqllocaldbに変更し、接続されるかどうかを確認します。LocalDbにはいくつかのバージョンがあり、1つはすべてを示しているわけではありません。
ジムヤーブロ2015

また、私が体験したこと:データベースが表示されなくなった場合は、[切断]をクリックし、再度接続してください。(リフレッシュは役に立ちません)
StefanG 2015

19

最初に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.

9

よし。

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

DataSource接続文字列の属性を次のように変更しました。

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

に:

Data Source=.\SQLEXPRESS;blah

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

ここに画像の説明を入力してください

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

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

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

これは、これがLocalDBの確実なバグであると考えるようになります。


ローカルDBをEF5で使用しようとすると問題が発生します
Nikos

LocalDBには、IIS Expressと同様に、管理者特権を必要とせずにローカルアカウントで実行できるという利点があります。これにより、個々のユーザーごとにIISまたはSQL Serverをセットアップしなくても、多くの開発者とプロジェクトを共有できます。
Bart Verkoeijen 2013年


2

最善かつ簡単な答えは今すぐ解決しました。データソースとしてur sqlサーバー名を使用し、最初のカタログをデータベース名にして、mdf行を削除します


1

私の場合、私はマイグレーションを使用し、configでdataContextとdataContextクラス自体の名前を変更し(名前を変更するだけ)、もう一度試してみて、それが役に立った


1

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

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


参考サイドノートでは、私はVS 2015で古いプロジェクトでこの作業が発生した詳細情報。VS 2013からv11.0への同様の変更もありますProjectsV12 。少なくとも私のマシンでは:-)。
狙う

0

私は同じ問題を抱えていましたが、「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" />


私はそれをテストしませんでしたが、これはおそらく動作しないはずです。のでDataDirectory、すでにローカルに設定されApp_Data、デフォルトでは、明示的に前に変更されない限り、そう、あなたのコードは何もしません。
Shimmy Weitzhandler 2013年

この方法を使用する場合は、ディレクトリを変更せず、MDFファイル名を変更してください。また、romiller.com
2013/05/17

0

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


0

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


0

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

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.