4

このエラーに関して他にも多くの投稿があったことは知っていますが、私の問題に光を当てたり助けたりすることはできませんでした. 私は SqlExpress への直接接続を使用しているため、特別な Oracle または MySQL データベースなどはありません。これは手袋のようにぴったり合うはずです。

シナリオはこれです。いくつかのプロジェクトで構成されるソリューションを作成しました。リポジトリ、データ (EF5.0)、ユーティリティ、テスト プロジェクト、MVC Web アプリケーション。目標は、EF5 と、テスト プロジェクトおよび MVC アプリケーションからのいくつかのリポジトリを使用して、Repositories プロジェクトのリポジトリを介してデータ クラスを介して基になる SQL Express データベースに簡単にアクセスすることです。

テスト プロジェクトは機能し、問題なくデータベースにアクセスして更新できます。

ただし、MVC Web プロジェクトは、「要求された .Net Framework Data Provider が見つかりません。インストールされていない可能性があります」というメッセージをスローしています。テスト プロジェクトと同じ接続文字列を使用しているため、理解できません。

[ArgumentException: Unable to find the requested .Net Framework Data Provider.  It may not be installed.]
   System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1426271
   WebMatrix.Data.DbProviderFactoryWrapper.CreateConnection(String connectionString) +64
   WebMatrix.Data.<>c__DisplayClass15.<OpenConnectionStringInternal>b__14() +16
   WebMatrix.Data.Database.get_Connection() +19
   WebMatrix.Data.Database.EnsureConnectionOpen() +12
   WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
   WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +14
   WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +232
   WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +85

私は持っている ...

  1. System.Data.SqlClient を web.config に登録しました。
  2. この記事に従って、System.Data の登録済みバージョン (2.0.0.0) が GAC に存在することを確認しました。
  3. 接続文字列にタイプミスがないことを確認しました。

これが私がweb.configに持っているものです...

  <connectionStrings>
    <add name="DBCatalogContext" 
         connectionString="metadata=res://*/DBCatalog.csdl|
                                    res://*/DBCatalog.ssdl|
                                    res://*/DBCatalog.msl;
                                    provider=System.Data.SqlClient;
                                    provider connection string=&quot;data source=.\SQLEXPRESS;
                                                                     initial catalog=DBCatalog;
                                                                     integrated security=True;
                                                                     multipleactiveresultsets=True;
                                                                     App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />
  </connectionStrings>

  <system.data>
    <DbProviderFactories>
      <add name="SqlClient Data Provider" 
           invariant="System.Data.SqlClient" 
           description=".Net Framework Data Provider for SqlServer" 
           type="System.Data.SqlClient.SqlClientFactory, 
                 System.Data, 
                 Version=2.0.0.0, 
                 Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </DbProviderFactories>
  </system.data>

私にとって意味をなさない唯一のことは、「参照」フォルダーの下の「System.Data」参照を選択し、プロパティを見ると、バージョン4.0.0.0であると表示されていますが、構成サイトの「DbProviderFactories」セクションのバージョンを変更してもエラーが発生します。また、機能するテストプロジェクトでこのライブラリへの参照も表示されません。

これは見落としであるか、構成設定が欠落していると確信していますが、この時点で他にどこを見ればよいかわかりません。

ありがとう、G

4

2 に答える 2

5

最初に投稿したときに、最終的に関連する情報をいくつか省略していたようです。これには、メンバーシップ サービスによってエラーがスローされたという事実が含まれていました。具体的には ... SimpleMembershipInitializer ... もともとこのクラスは接続文字列を指定していました ... データベース接続を初期化するときに使用される、web.config で定義された「DefaultConnection」。

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "UserId", "UserName", autoCreateTables: false);

代わりにこの単一の接続文字列を使用することを考えて、web.config に追加した「DBCatalogContext」接続文字列を使用するように変更しました。もちろん、問題は、追加した新しい接続文字列が、メンバーシップ サービスが認識しない Entity Framework 接続文字列であり、データ プロバイダー エラーが発生したことです。

Entity Framework 接続文字列に加えて、元の通常の接続文字列を追加しただけで、すべてが機能するようになりました。さて、この問題に関連するすべて...

<connectionStrings>
    <add name="DBCatalogContext" 
         connectionString="metadata=res://*/DBCatalog.csdl|
                                    res://*/DBCatalog.ssdl|
                                    res://*/DBCatalog.msl;
                                    provider=System.Data.SqlClient;
                                    provider connection string=&quot;data source=.\SQLEXPRESS;
                                                                     initial catalog=DBCatalog;
                                                                     integrated security=True;
                                                                     multipleactiveresultsets=True;
                                                                     App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />


    <add name="DefaultConnection" 
         providerName="System.Data.SqlClient" 
         connectionString="data source=.\SQLEXPRESS;initial catalog=DBCatalog;integrated security=True;multipleactiveresultsets=True;App=EntityFramework" />

  </connectionStrings>

他の誰かがこれを参考にしてくれることを願っています。

于 2013-01-23T05:41:05.433 に答える
0

私はまったく同じ問題を抱えていました。私は次のことを行っています:UserProfileモデルを拡張して、新しいプロパティEmail.

私はまた、Emailこの呼び出しに列を追加する必要があります:

WebSecurity.InitializeDatabaseConnection("AgileBoardDB", "UserProfile", "UserId", "UserName", "Email", autoCreateTables: true);

これは機能しませんでした。常に「... プロバイダーが見つかりません」というメッセージが表示されます。私は運がなかったすべてを試しました。

EF は十分にスマートで、自動的にEmail列を作成することがわかったので、余分なEmailパラメーターを削除したところWebSecurity.InitializeDatabaseConnection、すべてが正常に機能しています。

PS: 同じ EF 接続文字列を使用して DB に接続しています。

于 2014-01-08T09:04:54.157 に答える