2013-01-22 131 views
4

我知道已經有很多關於此錯誤的其他帖子,但沒有已經能夠擺脫任何燈光或對我的問題有所幫助。我使用的是直接連接到SqlExpress,所以沒有特殊的Oracle或MySQL數據庫或任何東西。這似乎應該像手套一樣適合。「無法找到所需的.Net Framework數據提供程序,可能未安裝它。」

所以情況是這樣的,我已經創建了一個解決方案,包括項目屈指可數;存儲庫,數據(EF5.0),實用程序,測試項目和MVC Web應用程序。我們的目標是通過使用EF5以及測試項目和MVC應用程序中的一些存儲庫,通過Repositories項目中的存儲庫通過Data類訪問基礎SQL Express數據庫。

測試項目的工作,並能沒有問題,訪問和更新數據庫。

但是,MVC Web項目正在拋出「無法找到請求的.Net Framework數據提供程序,它可能未安裝。」錯誤,我不明白,因爲它使用與測試項目相同的連接字符串。

[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. 註冊在web.config中的System.Data.SqlClient的。
  2. 確認System.Data的註冊版本(2.0.0.0)在GAC中存在this article
  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」部分中更改版本我仍然得到錯誤。另外我甚至都沒有在Test項目中看到這個庫的引用。

我相信,這是一個疏忽或者說我缺少一些配置設置,但我不知道還有什麼地方看這一點,所以任何幫助,將不勝感激。

感謝, 摹

回答

5

我顯然遺漏了一些最終的相關信息,當我最初發布。這包括錯誤是由會員服務引發的;特別是... SimpleMembershipInitializer ...最初,這個類指定了連接字符串...在初始化數據庫連接時使用的web.config中定義的「DefaultConnection」。

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

我已經改變了它使用我已經加入到web.config中的「DBCatalogContext」連接字符串,以爲我會用這一個連接字符串代替。當然,問題在於我添加的新連接字符串是成員資格服務無法識別的實體框架連接字符串,導致數據提供程序錯誤。

我簡單地加回到原來的,正規的連接字符串,除了實體框架的連接字符串,現在一切正常。那麼關於這個問題一切...

<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> 

我希望別人能有所幫助。

0

我有完全相同的問題。 我正在做以下幾點: 我擴展了UserProfile模型以擁有一個新的屬性Email

我,雖然我還必須在Email列添加到該呼叫:

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

這從來沒有工作過,我總是得到「......提供商沒有找到。」我試過一切都沒有運氣。

我發現EF足夠智能並自動創建Email列,因此我從WebSecurity.InitializeDatabaseConnection中刪除了額外的Email參數,現在所有參數都正常工作。

PS:我使用相同的EF連接字符串連接到我的數據庫。

相關問題