2

asp.net アプリケーションの .mdf ファイルに基づいてエンティティ モデル ファイル (.edmx) を作成し、App_Dataフォルダーに配置しました。

まず、エンティティ フレームワーク ウィザードによって作成された接続文字列:

<connectionStrings>
    <add name="Sales_DBEntities" 
        connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=.\SQLEXPRESS;attachdbfilename=&quot;c:\users\ext\documents\visual studio 2010\Projects\WebProject_A\WebProject_A\App_Data\Sales_DB.mdf&quot;;integrated security=True;USER INSTANCE=TRUE;multipleactiveresultsets=True;App=EntityFramework'" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

上記はapp.config、ウィザードによって作成されたファイルに配置されます。

同じ接続文字列をファイルにもコピーしましたweb.config(これが必要かどうかはわかりません)。

後で自分のマシンで同じアプリケーションを実行しようとしたときに、2 つの問題に遭遇しました (別のマシンでアプリケーションを作成しました)。

最初はユーザーインスタンスに関するものでした:

ユーザー インスタンスのプロセスの開始に失敗したため、SQL Server のユーザー インスタンスを生成できませんでした。接続が閉じられます

私がよく理解していない最初のことは、ユーザー インスタンスが実際に定義するものです。

MSDNによると:

ユーザー インスタンスは、親インスタンスによって生成される SQL Server Express データベース エンジンの個別のインスタンスです。

ローカル データベースはユーザー インスタンスと見なされますか?

False としてマークすることを提案する投稿に出くわしたため、この問題について明確にしたいと思います。その理由は私には明らかではありませんでした。

この件に関する別の投稿

そこから、この問題については、マシンの SQL Server でユーザー インスタンスを有効にする必要があることを説明する別のソリューションに出会いました。

修正

私はその投稿で説明されたことをしました

しかし、今、私は新しい問題に遭遇しました:

ファイル (app_data\my.mdf ファイルへのフル パス) の自動命名データベースをアタッチしようとしています。同じ名前のデータベースが存在するか、指定されたファイルを開くことができないか、または UNC 共有に配置されています。

私はすでにすべてのファイルを削除しようとしました

 C:\Documents and Settings\(your user account name)\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

他の投稿で提案されているように再起動しますが、それでもこの問題の明確な解決策が見つかりません。

これは長い投稿であることは承知していますが、助けていただければ幸いです

前もって感謝します。

4

2 に答える 2

3

ユーザー インスタンスの実際の概要については、こちらの非常に優れた概要をお読みください。

手短に:

  • SQL Server では、1 台のコンピューターでそれ自体の複数のインスタンスを使用できます。既定のインスタンスには、ホスト コンピューターのコンピューター名 (または IP アドレス) だけを使用してアクセスできます。他のすべてのインスタンスは、インスタンス名(SQLExpressあなたのマシン上で)

  • 開発目的で、ユーザー インスタンスを作成することもできます。各ユーザーは、SQL Server の独自の個別のインスタンスを取得し ( Express エディションでのみ機能します)、データベースはそのファイル名 ( path\Sales_DB.mdf) でそのユーザー インスタンスに接続されます。このインスタンスはオンデマンドで起動されてから実行され、不要になるとシャットダウンされます

これは開発ではうまく機能しますが、実際には後で使用することを意図したものではありません。

運用環境では、データベース ファイルを実行する実際の SQL Server インスタンスに、通常は SQL Server Management Studio を使用してアタッチします。これを行うと、ファイル名でそのデータベースを参照するのではなく、サーバーに接続されたときにデータベースに与えられたデータベース名を使用します。この場合、SQL Server は操作のすべての詳細を処理します。その SQL Server インスタンスは常に稼働しており (常に "オンデマンド" で開始する必要はありません)、権限や権限などを使用できます。データベースへのアクセスを制御するためのログイン。

接続文字列は次のようになります。

<connectionStrings>
    <add name="Sales_DBEntities" 
         connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='server=YourServerNameHere;database=Sales_DB;integrated security=True;App=EntityFramework'" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

データベースを運用 (またはテスト) SQL Server インスタンスにアタッチした場合、データベースを構成するファイルが何であるかを知る必要はなく、それらのファイルを指定する必要もありません。SQL Server が処理します。それ。データベース名でデータベースを参照するだけです。

于 2011-09-12T05:01:11.593 に答える
1

解決策は常に予想よりも単純です。

  1. ファイルをダブルクリックmodel.edmx->デザイナーが開きます。
  2. デザイナを右クリック-> Update model from database
  3. 新しい接続->Choose Database file (.mdf)タイプの下。
  4. 参照->App_Dataフォルダに移動し、DBを選択します。
  5. で作成した接続文字列をにコピーしApp.configますweb.config

さよなら。

于 2011-09-14T10:20:02.307 に答える