私はデータベース
とentityClient
への接続に.mdf
を使用していました。今度は、接続文字列を変更して、.mdf
ファイルが存在しないようにしたいと思います。
次の connectionString
は正しいですか?
<connectionStrings>
<!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />-->
<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
いつもエラーが出てしまうからです。
基礎となるプロバイダーがオープン時に失敗しました。
このエラーが発生し、いくつかの解決策を見つけました。
あなたの接続文字列を見ると、それは有効に見えます。 このブログ記事]1を見つけましたが、ここでの問題は、彼らが統合セキュリティを使用していたことです。 IISで動作させている場合、IISユーザーがデータベースにアクセスする必要があります。
Entity Framework][3] with Transactionsを使用している場合、Entity Frameworkはデータベースを呼び出すたびに自動的に接続を開いたり閉じたりします。 そのため、トランザクションを使用する場合は、1つのトランザクションを複数の接続に分散させようとします。 これはMSDTCに昇格します。
コードを以下のように変更すると直りました。
using (DatabaseEntities context = new DatabaseEntities())
{
context.Connection.Open();
// the rest
}
context.Connection.Open()`では問題が解決しなかったので、DTCの設定で"Allow Remote Clients"を有効にしてみたところ、エラーが出なくなりました。
Windows 7では、dcomcnfgを実行し、コンポーネントサービス -> コンピュータ -> マイコンピュータ -> 分散トランザクションコーディネータ -> ローカルDTCを右クリック -> セキュリティでDTCの設定を開くことができます。