2013-03-04 185 views
7

我想建立一個簡單的ASP.NET MVC 4 webapp使用數據庫首先從SQL Server遷移(2005年)。我已經在數據庫中創建了表,並使用實體框架在代碼中創建對象。我可以使用這些對象訪問數據。無法找到請求的.Net Framework數據提供程序。 (SqlClient)

當我嘗試在Global.asax.cs文件中使用WebSecurity.InitializeDatabaseConnection("FLMREntities", "UserProfile", "UserId", "UserName", true);初始化WebSecurity時,出現問題。我嘗試使用模板附帶的InitializeSimpleMembershipAttribute過濾器,並得到相同的問題。我得到的錯誤信息:

Unable to find the requested .Net Framework Data Provider. It may not be installed. 

下面是相關的連接字符串:

<add name="FLMREntities" 
    connectionString="metadata=res://*/Models.FLMR.csdl|res://*/Models.FLMR.ssdl|res://*/Models.FLMR.msl; 
        provider=System.Data.SqlClient; 
        provider connection string=&quot;data source=notes.marietta.edu; 
         initial catalog=muskwater; 
         user id=muskwater;password=********; 
         MultipleActiveResultSets=True; 
         App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

而且,我已經創建了數據庫中的成員表以匹配該模板創建。如果我將Initialize調用中的最終參數更改爲false(以便它不嘗試自動創建表),則返回它無法找到UserProfile表。我也嘗試過名稱變體,如[dbo]。[UserProfile]。

我只需要一個簡單的賬戶模型來允許用戶登錄並允許某些用戶查看更多內容。

+0

你的連接字符串(S)之前有一個''?爲了防止你從其他配置繼承任何 – Basic 2013-03-04 16:53:29

+0

我在這個項目中沒有其他連接字符串。我從模板中註釋掉了一個。我是否還需要'',並且將與上面的嵌套級別相同? – amoscardino 2013-03-04 19:34:55

+0

機器/站點範圍的配置可以將連接字符串添加到您的應用程序。有些框架也是如此。 ''應該是與連接字符串相同部分中的第一個元素(加載配置節時順序會被保留)。 – Basic 2013-03-04 21:56:00

回答

1

這可能是this的副本。

從我記得的這個問題,你需要確保sqldata提供程序已註冊。有時候,在你的machine.config中有一個需要刪除的重複條目,如果我沒有記錯的話,可能會有一個錯誤的條目需要刪除。看看this msdn post,這個信息大約在頁面的一半。

指向其他SO的鏈接有一些可能有用的鏈接。如果這最終沒有被標記爲重複問題,我可以在這裏添加它們,或者做任何適當的事情。

你正在尋找的部分將類似於此,我認爲:

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

從您在評論中提供的信息,似乎這是你的machine.config中失蹤。除非我誤認爲(可能),這意味着SQL提供程序未在您的計算機上註冊。你需要將上面的部分添加到你的web.config中。您還需要確保在您的項目中引用了System.Data.SqlClient。

如果您的目標機器上沒有安裝它,那麼您將需要做更多工作來完成安裝。我希望我可以幫助你更多,但當我這樣做時,它是用於SqlServerCE的,所以我使用的文件有很大的不同。

祝你好運!

編輯: 一個重要的信息,是版本需要匹配您正在使用的文件。在type =「blabh..blah..blah..Version = 2.0.0.0,blah blah」這需要是您使用的文件的版本,所以請右鍵單擊您的文件並獲取文件版本。如果失敗,請嘗試版本的變體。我相信我的文件是2.0.0.1,但版本= 2.0是我做到這一點時的工作。只需根據您的版本號嘗試幾個不同的版本(例如2.0,2.0.0,2.0.0.1)。

+0

這個問題的答案並不能解釋如何解決這個問題。我找到了machine.config文件,並且只有SqlServerCe的DbProviderFactory條目。我需要爲SqlClient添加一個條目嗎?它會看起來像你發佈的嗎? – amoscardino 2013-03-04 19:40:11

+0

我不會修改machine.config,除非你知道你在做什麼。讓我看看能否找到我遇到這個問題時使用的資源,以便您有更好的想法。 – 2013-03-04 19:47:54

+0

另外,僅供參考,當我有與您一樣的錯誤(在運行時),這是解決方案。我必須確保部署正確的文件,並且必須將我列出的部分添加到我的web.config中。 – 2013-03-04 19:58:04

0

只是想在這裏編鐘,我有這個問題,通過查看我的machine.config的目標.NET版本,我跑了... ...結構中:

確保目標數據提供正確內有輸入,只有每提供商(我已經看到重複導致問題)之一,以及,確保它是有效的XML,以及您只有一個DBProviderFactories條目。在我的情況下,我在初次入境後有一個條目(基本上有兩個條目,一個與我的提供者,一個空白),空白導致了所有問題。

希望這可以幫助別人有同樣的問題:)

4

我有一個類似的問題,我做了什麼: 我修改了默認的連接。我已經爲EDMX模型的連接字符串,它是這樣的:

<add name="ChemicalReporterEntities" connectionString="metadata=res://*/ChemicalDB.csdl|res://*/ChemicalDB.ssdl|res://*/ChemicalDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLExpress;initial catalog=ChemicalReporter;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

但我不能與SimpleMemebrship提供商使用它。因此,在Visual Studio中我打開服務器資源管理器>數據連接,我選擇我的連接,單擊鼠標右鍵,屬性,我從那裏複製的連接字符串,並將其粘貼到defaultConnection:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;Initial Catalog=ChemicalReporter;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" /> 

之後,我改變WebSecurity.InitializeDatabaseConnection使用DefaultConnection。

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", true); 
相關問題