2013-02-04 96 views
2

,我發現了異常基礎提供失敗的ConnectionString的(| DataDirectory目錄|和的LocalDB)

基礎提供失敗的ConnectionString的。關鍵「attachdbfilename」

一個Windows 7家庭高級虛擬機上

與內部異常

值無效,因爲我試圖部署和調試應用程序。

但是,在我的開發機器上,應用程序剛啓動時沒有問題。

連接字符串:

<add name="AssetsLocalDBEntities" connectionString="metadata=res://*/AssetsLocalDB.csdl|res://*/AssetsLocalDB.ssdl|res://*/AssetsLocalDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\v11.0;attachdbfilename=|DataDirectory|\AssetDatabase.mdf;initial catalog=AssetDBSource;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

史蒂夫倫斯已經提到,在連接字符串中包含本主題中的垃圾:尚未 The underlying provider failed on ConnectionString

,如馬克西姆Gueivandov答覆說,這應該有效的連接字符串,因爲它直接由EntityFramework的edmx設計器生成。 至少,我相信它是有效的,因爲它在開發機器上工作。

另外在另一個主題(Entity Framework - The underlying provider failed on ConnectionString)中,接受的答案是刪除&「並將它們替換爲\ ",因爲該字符串是c#代碼中的一個字面值,但我仍然在xml中有我的連接字符串,所以&「不能簡單地被替換。 on-connectionstring

安裝在虛擬機上的.NET版本是4.0.30319,MsSQL Server Express LocalDB是11.0.2318.0,所以我相信它們都是最新的。

編輯:如果我刪除「| DataDirectory |」從連接字符串讓我的開發機上出現以下錯誤:

無法將文件「AssetDatabase.mdf」附加數據庫「AssetDBSource」。

所以我也去掉「初始目錄= AssetDBSource」我也得到

嘗試附加文件AssetDatabase.mdf失敗自動命名的數據庫。具有相同名稱的數據庫存在,或指定的文件無法打開,或位於UNC共享上。

我可以使用emagine這是因爲它不知道在哪裏看?所以,我提供了完整的路徑(C:.. \ AssetDatabase.mdf),它的工作原理。

因此問題的其餘部分是:我如何獲得與LocalDB一起工作的相對路徑?

回答

3

我相信目標機器沒有安裝.NET 4的Update 4.0.2或更高版本。 .NET 4的版本號可能會令人困惑,因爲版本4.0.30319似乎被所有人使用。NET 4構建。實際上,這並不意味着你的機器有Update 4.0.2。

您可以在目標計算機上安裝.NET 4 Update 4.0.3(截至今日最新的.NET 4更新)並查看問題是否消失?

或者只是驗證是否安裝了更新 - 只需在.NET 4中構建一個簡單的應用程序,該應用程序使用SqlClient連接到使用連接字符串的LocalDB,並記錄錯誤信息以防萬一您仍然遇到任何錯誤。 EF錯誤信息是相當通用的,我不知道如何從基礎SqlClient提供程序得到詳細的錯誤。

另外,您也可以將它移植到.NET 4.5。

+0

我試過安裝4.0.2更新(KB2544514),但我得到「KB2544514不適用,或被您計算機上的其他條件阻止。」所以我猜想它已經安裝好了。 另一方面安裝4.0.3(KB2600211),會看到什麼讓我受益。 4.5目前還不是一個選項,因爲我使用的一些第三方庫不支持4.5。 –

+0

可能很愚蠢的問題,但是......你有沒有得到正確的包裝?如果你有64位操作系統,你需要獲得「* -x86-x64.exe」。也許你已經安裝了一些阻止4.0.2更新的.NET 4修補程序。最後,也許機器處於不良狀態,會阻止任何.NET更新,例如Windows安裝程序(MSI)內部數據庫被損壞時。 –

+0

我還更新了答案,並附加了一個選項,以確認Update 4.0.2或更新版本是否已安裝,然後再嘗試安裝它。 –