7

私は VS 2012 RTM を EF 5 で使用しています。Code First を使用していますが、開発中なので Code Migrations を無視しようとしています。それらを避けるために、私はこのセットを持っています

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

時折、モデルに触れていないと思っていても、モデルを再作成することを決定します。それはいいです。しかし、それは通常エラーになります

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

そのため、データベースを完全に削除することにしました。VSに入り、「SQL Server Object Explorer」に行き、DBを見つけて削除します。今、私は立ち往生しています

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

昨夜これが発生し、機能するまでいじりました(タスクをシャットダウンし、VSを再起動し、web.configのDBとファイル名を変更するなど)

質問 1) この状態から抜け出すにはどうすればよいですか?

しかし、より重要な問題は、どうすればこの状態に陥らないようにすることができるかということです。

4

2 に答える 2

6

SQL Server Object Explorerウィンドウは、データベースへの接続を保持できます。ウィンドウを閉じると、ウィンドウから開いたすべてのウィンドウが接続を解放します。

于 2013-02-01T04:52:16.443 に答える
5

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

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

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

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

ここでアプリケーションを実行すると、データベースがそこにあり、テーブルが正しく作成されているはずです。このステップが正常に実行されたら、データベース初期化子を次のように変更します。

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>());
于 2012-12-04T08:43:00.843 に答える