データベースへの接続の問題 - ユーザーインスタンスとエンティティフレームワークの問題
-
29-10-2019 - |
質問
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="c:\users\ext\documents\visual studio 2010\Projects\WebProject_A\WebProject_A\App_Data\Sales_DB.mdf";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は処理しますそれ。データベースを介して参照するだけです データベース名.
他のヒント
ソリューションは常によりシンプルで、予想されます。
- ダブルクリックします
model.edmx
ファイル - >デザイナーが開きます。 - デザイナー - >を右クリックします
Update model from database
. - 新しい接続 - >
Choose Database file (.mdf)
タイプの下。 - 閲覧 - >あなたに行きます
App_Data
フォルダー、およびDBを選択します。 - 作成された接続文字列をコピーします
App.config
にweb.config
.
さよなら。