2012-08-25 7 views
7

私はVS 2012 RTMでEF 5を使用しています。私はコードファーストを行っていますが、開発中であるためコードマイグレーションを無視しようとしています。それらを避けるために、私は私がモデルに触れてきたとは思わない場合でも、これは時折 マイグレーションを使用しないでLocalDBとEFを操作する方法

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>()); 

を設定する必要があり、それは再作成することを決定しました。それはいいです。しかし、通常はエラーが発生します。

データベースは現在使用中であるため、削除できません。

私はデータベースを完全に削除することにしました。私はVSに入り、 "SQL Server Object Explorer"に行き、DBを見つけてそれを削除します。今、私は

ファイルを添付することはできません「{0}」データベースとして、私はこれが最後の夜起こると私はちょうどそれが動作するまでの周りいじっていた「{1}」

(シャットダウンで立ち往生していますVSを再起動し、web.configなどのDBおよびファイル名を変更しました。

質問1)どうしてこの状態から抜け出すことができますか?

もっと重要な質問ですが、どうやってこの状態になるのを防ぐのですか?

+0

なぜ自動移行を使用しないのですか?実稼働環境にデプロイするときは、構成からでもいつでもDB初期化メソッドを変更できます。 –

+0

[This](http://msdn.microsoft.com/en-us/data/jj554735)に、自動移行を使用しない理由がいくつか挙げられています。とにかくコードベースの移行を使用する必要があるまでは、これまでのところしか得られません。 –

+0

同じ問題に直面していますが解決策を見つけましたか? – Shimmy

答えて

5

私は同じ問題を抱えており、それを修正することができました。主な問題は、EFが自動的にデータベースを作成しないことです。解決策はそれほど難しくありません。

まず、ソリューションエクスプローラに移動し、データベースを手動で作成します。これを行うには、データベースがあるフォルダ(通常App_Data)に移動します。このフォルダを右クリックし、Add - > New Itemをクリックします。 データタブを選択し、SQL Serverデータベースを選択します。 Entity Frameworkが期待する名前(Cannot attach the file '{0}' as database '{1}'エラーメッセージで指定されている)を必ず入力してください。

次に、データベースにモデルメタデータが含まれていないというエラーメッセージが表示されます。これを回避するには、データベースの初期化がに変更します。

Database.SetInitializer(new DropCreateDatabaseAlways<SomeContext>()); 

これでアプリケーションを実行し、データベースが正しく作成されたテーブルであるはずです。このステップが正常に実行されたら、あなたは、データベースの初期化は、バックに変更する変更:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>()); 
+2

情報をいただきありがとうございました。 – Form

+1

本当に役に立ちました! –

6

SQL Serverのオブジェクトエクスプローラをウィンドウには、データベースへの接続を保持することができます。ウィンドウとそのウィンドウから開いたすべてのウィンドウを閉じると、接続が解除されます。

関連する問題