2011-07-15 14 views
0

私はEntity Framework Code FirstでASP.NET MVC 3を学習しています。私はチュートリアルに従っており、ローカルマシンでテストするための対応するソリューションをダウンロードしました。さて、私がよく理解していなかったのは、データベースの自動作成(ディスクにまだ存在していない場合)です。アプリケーションを初めて実行すると、データベースが作成されます。それで大丈夫です。ここでEF4でのデータベースの自動作成に関する問題

は、Web.configファイル

<add name="BlogContext" 
    connectionString="Data Source=.\SQL2008;Initial Catalog=CodeFirstMVC.mdf;Integrated Security=SSPI" 
    providerName="System.Data.SqlClient" /> 

内のセクションですが、私は2つの問題を抱えて:

第一に。テスト目的のために、私はディスク上のデータベースを削除し、再度ソリューションを実行します。私は、データベースが自動的に作成されるだろうと思ったが、私は間違っていた:私は下のエラーメッセージが表示されました:

{"Unable to open the physical file \"c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQL2008\\MSSQL\\DATA\\CodeFirstMVC.mdf.mdf\". Operating system error 2: \"2(failed to retrieve text for this error. Reason: 15105)\".\r\nCannot open database \"CodeFirstMVC.mdf\" requested by the login. The login failed.\r\nLogin failed for user 'sa'.\r\nFile activation failure. The physical file name \"c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQL2008\\MSSQL\\DATA\\CodeFirstMVC.mdf_log.LDF\" may be incorrect."} 

私は私のWeb.configファイル名を変更した場合、データベースが再び正常に作成されていることに気づきました。 私を説明できますか?データベース名を変更して再度実行する必要があるのはなぜですか?

第2位。データベースは、C:¥Program Files¥Microsoft SQL Server¥MSSQL10.SQL2008¥MSSQL¥DATAにあるフォルダに作成されます。私はApp_Dataディレクトリに自分のデータベースを保存したいと思います。 どうすればいいですか?

答えて

1

Initial catalogはファイルへのパスではありません。これはデータベースの名前です。接続文字列は次のようになりますので、AttachDbFilenameは、ファイルを指定するために使用されます。|DataDirectory|は、ローカルのアプリケーションデータディレクトリの代わりに、グローバルSQL Serverのデータディレクトリを使用するようにSQL Serverに指示し

Data Source=.\SQL2008;Initial Catalog=CodeFirstMVC;AttachDbFilename=|DataDirectory|CodeFirstMVC.mdf;Integrated Security=SSPI 

。 WebアプリケーションのローカルデータディレクトリはApp_Dataです。

編集:私はちょうどあなたはおそらく完全なSQLサーバの代わりに、SQLサーバーのExpressを使用していることに気づいた

。 App_Dataにデータベースを自動的に作成することは、SQL Server Expressの機能です。 SQL ServerはCodeFirstMVC.mdfという名前のデータベースを作成し、そのデータベースをCodeFirstMVC.mdf.mdfファイル内のグローバルデータディレクトリとCodeFirstMVC.mdf.ldfファイルのトランザクションログに保存したため、最初のエラーについても説明します。また、そのデータベースを内部的に登録しました。ファイルを削除することで、SQL Serverからデータベースを削除しませんでした。あなたはその機能を壊すだけですが、SQLサーバーはデータベースが存在すると考えています。これは、名前を変更して動作させる必要がある理由です。

+0

私の2番目の質問にお答えします、ありがとうございます。私の最初の質問では、データベースを削除してもう一度実行するとアイデアがありますが、なぜデータベース名を変更する必要があるのですか(そうでなければエラーメッセージが表示されます)。 – Bronzato

+0

私の編集で説明しました。 –

+0

私は理解しています。ローカルマシンでSQL Server Express 2008をインストールしましたが(Management Studioを使用してデータベースを開くことができませんでしたか?)とにかく、私は物事を変更し、SQL Server Expressデータベースを使用するにはどうすればいいですか?またはSQLCEデータベース?私は私のマシンに両方をインストールしました。ありがとう – Bronzato

関連する問題