データベースへの接続の問題 - ユーザーインスタンスとエンティティフレームワークの問題

StackOverflow https://stackoverflow.com/questions/7381591

質問

ASP.NETアプリケーションの.mdfファイルに基づいて、Entity Modelファイル(.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つの問題に出くわしました(別のマシンでアプリケーションを作成しました)。

1つ目は、ユーザーインスタンスに関するものでした。

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

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

MSDNによると:

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

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

私はそれを偽りとしてマークすることを提案する投稿に出会ったので、私は本当にこの問題についていくつかの明確化を望んでいます、そしてその理由は私には明らかではありませんでした。

この問題に関する別の投稿

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

修正

その投稿で説明されたことをやった

しかし今、私は新しい問題に出くわしました:

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

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

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

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

私はこれが長い投稿であることを知っていますが、どんな助けも感謝します

前もって感謝します。

役に立ちましたか?

解決

これを読む ユーザーインスタンスが実際にあるものの非常に良い概要.

手短に:

  • SQL Serverを使用すると、複数を使用できます インスタンス 単一のコンピューターでそれ自体 - デフォルトのインスタンスは、ホストマシンのマシン名(またはIPアドレス)のみを使用してアクセスできます - 他のすべてのインスタンスは、 インスタンス名 (以下のような SQLExpress マシン上)

  • 開発目的では、aを作成することもできます ユーザーインスタンス - 各ユーザーは、SQL Serverの独自のインスタンスを取得します(で動作します エクスプレスエディション のみ)そして、データベースはそのファイル名で添付されています(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は処理しますそれ。データベースを介して参照するだけです データベース名.

他のヒント

ソリューションは常によりシンプルで、予想されます。

  1. ダブルクリックします model.edmx ファイル - >デザイナーが開きます。
  2. デザイナー - >を右クリックします Update model from database .
  3. 新しい接続 - > Choose Database file (.mdf) タイプの下。
  4. 閲覧 - >あなたに行きます App_Data フォルダー、およびDBを選択します。
  5. 作成された接続文字列をコピーします App.configweb.config.

さよなら。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top