24

新しい ASP.NET MVC 4 アプリケーションを作成しましたが、最初にコードを使用したいと考えています。ただし、データベース ファイルがまだ存在しない場合、最初にデータベース ファイルを作成するようには見えません。App_Data フォルダーから .mdf ファイルを削除すると、アプリがデータベースにアクセスしようとすると、次の例外が発生します。

System.Data.SqlClient.SqlException: Cannot attach the file '<path-to-db-file>.mdf' as database '<my-db-file-name>'.

デバッガーのアプリで実行すると、LazyInitializer.EnsureInitialized を呼び出すときに、InitializeSimpleMembershipAttribute::OnActionExecuting メソッドで例外が発生していることがわかります。キャッチされた例外は次のとおりです。

[System.Reflection.TargetInvocationException]   {"Exception has been thrown by the target of an invocation."}   System.Reflection.TargetInvocationException

内部例外:

[System.InvalidOperationException]  {"The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588"} System.InvalidOperationException

次に、その内部例外として上で述べた最初の例外があります。

私が間違っていることはありますか?

アップデート

真新しいMVC4アプリで試してみました。次のようにして複製できます。

  1. VS ウィザードで MVC アプリを作成します。
  2. アプリを初めて実行し、ログイン ページに移動します (mdf ファイルが生成されることに注意してください)。
  3. mdf ファイルを削除し、ログイン ページに戻ります。例外がスローされるようになりました。
4

7 に答える 7

9

同じ問題に陥り、ここで私の解決策を見つけました。必要なのは、VS 開発者コマンド プロンプトを開いて LocalDb を停止し、次のように入力することだけです (引用符なし)。

「sqllocaldb.exe停止v11.0」

「sqllocaldb.exe 削除 v11.0」

次回、EF はファイルとデータベースを再生成します。

于 2013-12-14T13:02:17.393 に答える
2

MVC で生成されたコードは、"DefaultConnection" という名前のデータベース接続文字列で動作します。Web.config で別の名前を使用した場合は、次の場所でこの名前を参照する必要があります。

  1. InitializeSimpleMembershipAttribute.SimpleMembershipInitializer.ctor() in InitializeSimpleMembershipAttribute.cs)。
  2. AccountModel.cs の UsersContext.ctor()

(または、プロジェクトで「DefaultConnection」を検索するだけです)。

于 2012-11-17T13:52:40.807 に答える
2

次のように、プロジェクトのルート フォルダーにある Global.asax ファイルの Application_Start メソッドで Code First データベースの初期化を処理できます。

    protected void Application_Start()
    {
        Database.SetInitializer<MyDBContext>(null);
    }

null を SetInitializer に渡すと、データベース テーブルが作成または変更されないため、手動で行う必要があります。

データベースが再生成されない理由は、アプリケーションの有効期間中に Application_Start が 1 回だけ起動されるためです。

于 2012-10-10T16:48:10.743 に答える
1

エクスプローラーで自動作成された .mdf ファイルを削除しないでください。SQL 管理ツールまたはオブジェクト エクスプローラーでのみ削除してください。

あなたが得ている(そしてあなたが提供した手順で複製できる)問題は、データベースがまだLocalDbに登録されていることです。

于 2013-04-05T03:45:35.637 に答える