2009-09-10 94 views
58

我有一個asp.net-mvc應用程序與默認的成員數據庫。我正在通過ADO.NET實體框架訪問它。關鍵字不支持數據源

現在我想將它移動到IIS,但出現了幾個問題。我不得不安裝SQL Server Management Studio,創建新的數據庫,從那裏導入前一個.MDF文件中的所有數據。只有剩下要做的事情(據我所知)是改爲連接字符串。但是,我並沒有真正體驗過這一點,並不斷獲得不支持的關鍵字:'數據源'。例外。這是我的連接字符串:

<add name="ASPNETDBEntities" 
    connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
    providerName="System.Data.EntityClient" /> 

任何想法,怎麼了?

回答

110

你有什麼是一個有效的ADO.NET連接字符串 - 但它是不是一個有效的實體框架連接字符串。

的EF連接字符串會是這個樣子:

<connectionStrings> 
    <add name="NorthwindEntities" connectionString= 
    "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl; 
     provider=System.Data.SqlClient; 
     provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 

你錯過了所有的EF連接字符串中的metadata=providerName=元素......你基本上只能有什麼包含在provider connection string部分。

使用EDMX設計器應該在您的web.config或app.config中爲您創建一個有效的EF連接字符串。

馬克

UPDATE:OK,我明白你想要做什麼:你需要第二個「ADO.NET」連接只是爲ASP.NET用戶/會員數據庫字符串。你的字符串是好的,但providerName是錯誤的 - 它必須是「System.Data.SqlClient」 - 這個連接不使用ENtity Framework - 不要爲它指定「EntityClient」!

<add name="ASPNETMembership" 
    connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
    providerName="System.Data.SqlClient" /> 

如果指定providerName=System.Data.EntityClient ==>實體框架連接字符串(與元數據=和一切)。

如果需要,指定providerName=System.Data.SqlClient ==>直ADO.NET SQL Server連接字符串沒有所有的EF增加

+0

事實上,它確實存在,但後來發現異常無法打開物理文件「C:\ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf」。操作系統錯誤5:「5(無法檢索此錯誤的文本,原因:15105)」。 嘗試附加文件C:\ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf的自動命名數據庫失敗。具有相同名稱的數據庫存在,或指定的文件無法打開,或位於UNC共享上。從某些來源,我想,這是錯誤的..無論如何。 – Trimack 2009-09-10 10:32:37

+0

我不知道我理解第二個連接字符串問題。我應該讓那裏的設計師生成並添加您寫給我的ASPNETMembership? – Trimack 2009-09-10 10:42:07

+0

如果您的實體在EDMX設計器中 - 那些需要通過「EntityClient」和EF連接字符串進行訪問。如果使用「開箱即用」的ASP.NET成員資格系統,它不是** EF模型的一部分,所以當您爲ASP.NET成員資格數據庫創建連接字符串時,不能使用「 EntityClient「作爲提供者 - 使用SqlClient。 – 2009-09-10 11:49:33

4

當你引用你的web.config(或app.config)中連接可能會出現此問題通過指數串...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString; 

從零開始的連接字符串並不總是一個在您的配置文件,因爲它inherits others by default from further up the stack

推薦的方法是訪問由名字的連接...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; 

或清除在您的配置文件中的第一個元素connnectionStrings ...

<connectionStrings> 
    <clear/> 
    <add name="MyConnection" connectionString="... 
0

我已經當這個問題我開始使用實體框架,它發生在我沒有更改舊的SQL服務器連接到EntityFrameWork連接時。

解決方案: 文件在連接是通過web.config文件中提出「加名=」 實體「的connectionString = XYZ」, 確保你指的是正確的連接,在我的情況,我不得不請執行此操作

 public static string MyEntityFrameworkConnection 
    { 
     get 
     { 
      return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString; 
     } 

    } 

只要需要建立連接,就調用MyEntityFrameworkConnection。

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection; 

注意:將實體模型添加到解決方案時,將自動生成web.config文件中的連接。

2

我遇到了同樣的問題。
但這段代碼很好用,試試吧。

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 
0

我知道這是一個老的文章,但我得到了同樣的錯誤日前所以它的價值,這裏是另一種解決方案:

這通常是一個連接字符串錯誤,請檢查的格式的連接字符串,你可以查看'實體框架connectionstring'或遵循上面的建議。

然而,在我的情況我的連接字符串是個好人,錯誤是由完全不同的東西,所以我希望這可以幫助別人造成的:

  1. 首先我有一個EDMX錯誤:有一個EDMX和表中的新數據庫表不存在於我的數據庫(有趣的是錯誤,錯誤不是很明顯,因爲它沒有顯示在我的EDMX或輸出窗口中,而是隱藏在Visual Studio中的' '警告'下的'錯誤列表'窗口)。我通過將缺少的表添加到我的數據庫來解決了這個錯誤。但是,實際上,我是忙着增加一個存儲過程,仍然得到了「數據源」的錯誤等等看下面如何解決它:

  2. 存儲過程的錯誤:我是想添加一個存儲過程,每次我通過EDMX設計窗口添加它我得到了'數據源'錯誤。解決方案是將存儲過程添加爲空白(我保存了存儲的proc名稱和聲明,但刪除了存儲的proc的內容並將其替換爲'select 1',並重試將其添加到EDMX中)。有效!據推測,EF不喜歡我存儲的proc內的東西。一旦我添加了proc到EF,我就可以將我的數據庫中proc的內容更新爲我想要的內容,並且它可以工作,'數據源'錯誤得到解決。

怪事

0

我得到了同樣的錯誤,然後更新如下我的連接字符串,

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 

試試這將解決您的問題。