2016-04-13 85 views
0

現在、ライブデータを変更しないようにテスト目的でデータベースのローカルコピーに接続しようとしています。データにアクセスする際のLocalDbエラー "オープンしたときに基になるプロバイダが失敗しました"

私はEntity Frameworkの(.NET 4.5)でMVCを使用している、と私はEFを介してデータにアクセスしようとするたびに、私は現在、このエラーに実行しているよ:

An exception of type 'System.Data.EntityException' occurred in System.Data.Entity.dll but was not handled in user code 

Additional information: The underlying provider failed on Open. 

これをしようとしている機能ですデータにアクセスする - エラーが

public IEnumerable<Client> GetClients() 
{ 
    List<Client> clients = (from c in this.repository.Clients select c).ToList(); 
    return clients; 
} 

最初の行で発生ここでは、同様のapp.configの私の接続文字列です:

<add name="EntitiesConnectionString" connectionString="metadata=res://*/EFName.csdl|res://*/EFName.ssdl|res://*/EFName.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=(LocalDb)\v11.0;Initial Catalog=testdb;Integrated Security=True;Pooling=False&quot;" providerName="System.Data.EntityClient" /> 

私は作成したローカルDBを管理するためにVisual Studio 2015に付属の統合SQL Server Expressを使用しています。私が見つけたことを

詳細情報:

"Cannot open database \"testdb\" requested by the login. The login failed.\r\nLogin failed for user 'NT AUTHORITY\\SYSTEM'." 

私はおそらく何かが接続文字列に問題がある、私は私が作成したDBに設定されたすべての権限を持っていることを信じていないのですか?

編集:私は 'NT AUTHORITY \ NETWORK SERVICE' は、ユーザを追加し、その後、私も試みた

運なしでMS SQL Server Management Studioで 'db_ownerの' ロールにそれを追加しました

資格情報と「db_owner」ロールを持つ新しいログインとユーザーを作成するために、同じ「ログインがユーザーのユーザーに失敗しました」というメッセージが表示されます。

これは私が作成したテストユーザーを使用している接続文字列です:

<add name="EntitiesConnectionString" connectionString="metadata=res://*/EFName.csdl|res://*/EFName.ssdl|res://*/EFName.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=(LocalDb)\v11.0;Initial Catalog=testdb;Integrated Security=False;Persist Security Info=True;User ID=test;Password=password&quot;" providerName="System.Data.EntityClient" /> 
+1

[MSSQLエラー「基になるプロバイダーがOpenで失敗しました」](の可能性のある重複http://stackoverflow.com/questions/2475008/mssql-エラー - 基礎プロバイダ - オープンで失敗しました) –

+0

私はObjectContextを使用していますが、これは投稿されたソリューションでは動作しません。また、リンクしているブログ記事を読んで、MS SQL Server Management Studioで 'NT AUTHORITY \ NETWORK SERVICE'ユーザーを追加することを提案しました。これもやってみましたが、同じエラーが表示されています。 –

+0

プロバイダのSystem.Data.SqlClientはどのように定義されていますか?あなたはそれを再インストールしてみましたか? – DevilSuichiro

答えて

1

あなたはおそらく基礎となる接続を処分した後GetClients()を列挙しています。

いずれかを試してみてください。それとして

IEnumerable<Clients> clients = GetClients().ToList(); 

を:

a)はList< Client>

public List<Client> GetClients() 
{ 
    List<Client> clients = (from c in this.repository.Clients select c).ToList(); 
    return clients; 
} 

またはb)すぐに方法で.ToList()を呼び出すようなものにメソッドの戻り値の型を変更メソッド内の.ToList()の実行は、メソッドの戻り値が列挙されるまで延期されます。 db接続が破棄された後です。

+0

ありがとうございました!私は両方の提案を試みました - しかし、残念ながら私はまだ同じエラーが発生します。私は問題が接続を開こうとすると起こっていると思う。 –

1

あなたの方法としてIEnumerable<Client>を返す場合は、Enumerable<Client>も返さなければなりません。

public IEnumerable<Client> GetClients() 
{ 
    List<Client> clients = (from c in this.repository.Clients select c).ToList(); 
    return clients.AsEnumerable(); 
} 

以下のように使用し、それはあなたがNT AUTHORITY \ NETWORK SERVICEを追加したことで、なぜそれが

1

を助けることを願っていますか?最初のエラーメッセージから、実行中のコンテキストがNT AUTHORITY \ SYSTEMユーザーであるように見えます。

この場合、NT AUTHORITY \ SYSTEMをデータベースのログインとして追加し、db_ownerなどの必要な役割を付与する必要があります。

これで解決できない場合は、もう一度見てください。

+0

いいキャッチ!私はそれをまったく気付かなかった。私はそれを試しに行くつもりです。 –

+0

修正しましたか? –

1

私は私の問題の解決策を見つけました!やりたいことがいくつかありました。

まず第一に、以下のサービスが実行されているとする必要はなかった。

のSQL Server(MSSQLSERVER)

SQL Serverエージェント(MSSQLSERVER)

SQL Serverブラウザ

第2に、別のローカルサーバーを使用しました(LocalDb)\ v11.0または(LocalDb)\ mssqllocaldbを使用して、データベースとデータを再コピーしました(データソースのコンピュータ名のみを使用)

第3に、SQL Server Management Studioを使用してローカルDBに接続し、 db_owner権限は、その後のような私の接続文字列のものを使用します。

<add name="EntitiesConnectionString" connectionString="metadata=res://*/EFName.csdl|res://*/EFName.ssdl|res://*/EFName.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=POI;Initial Catalog=testdb;Integrated Security=False;Persist Security Info=True;User ID=test_user;Password=thepassword&quot;" providerName="System.Data.EntityClient" /> 
関連する問題