2012-12-05 93 views
0

我無法找到我的connectionString語法是如何錯誤的。任何人都可以提出一個方法來解決這個問題?我用連接字符串使用EF有困難。我是EF新手。實體框架ConnectionString解析異常

  • 我正在使用Sybase Anywhere 12數據庫。
  • 我正在使用Table-First ObjectContext和EDMX在Web應用程序重新啓動的單獨的類庫中。
  • 我在我的類庫中使用Ninject模塊來綁定我的存儲庫。
  • 我使用ODBC數據存儲所謂的 「測試」
  • 其他信息EF 4.3.1.0,.NET 4,VS2010
  • 我主要的Web應用程序的web.config有EF連接字符串複製到它:

<connectionStrings> <add name="Entities"connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|res://*/MyEntities.msl;provider=iAnywhere.Data.SQLAnywhere;provider connection string=&quot;UserID=aUser;Password=aPassword;DataSourceName=Test&quot;" providerName="iAnywhere.Data.SQLAnywhere"/> </connectionStrings>

當我初始化我的實體/ ObjectContext的在我的倉庫(參見使用下面的語句),它返回一個錯誤:「指定的命名連接或者未在配置中發現的,不打算與使用EntityClient提供程序,或無效。「

 using (var context = new Entities()) 
     { 
      return {Linq to Entity here} 
     } 

我打開CLR異常的調試,發現該代碼引發錯誤在.NET Framework這裏:

EntityConnection.cs

effectiveConnectionOptions =新DbConnectionOptions(setting.ConnectionString,EntityConnectionStringBuilder 。同義詞,錯誤);

EDMX設計器生成的:

/// <summary> 
     /// Initializes a new Entities object using the connection string found in the 'Entities' section of the application configuration file. 
     /// </summary> 
     public Entities() : base("name=Entities", "Entities") 
     { 
      this.ContextOptions.LazyLoadingEnabled = true; 
      OnContextCreated(); 
     } 

我可以看到我的連接字符串在那裏,所以它是有困難的時候解析的connectionString。我已經嘗試了語法的多種不同的排列,並沒有發現任何東西它接受包括:

  • 明確命名大會實體文件,而不是一個通配符(如元數據= RES://MyDomain/MyEntities.csdl .. )
  • 使用Sybase友好的ODBC屬性(例如UID而不是UserID,PWD而不是密碼)和DBN(而不是DataSourceName)。

感謝。

+0

你如何設置連接字符串?你的連接實際上是怎樣的? – Pawel

+0

對不起,連接字符串需要顯示特殊的html字符。它現在應該顯示正常。 – evodev

+0

謝謝。我認爲我還不夠清楚 - 你能顯示「實體」類的構造函數來顯示連接字符串是如何設置的嗎?你是自己編寫這段代碼還是由VS生成的? – Pawel

回答

0

我得到了一切工作,我能想到的唯一原因是我刪除了我的ASP .NET 4.0臨時文件。另外,我必須補充一點,我改變了使用集成測試的過程來測試這件作品使用單元測試。我沒有先做單元測試,因爲我們的構建服務器上沒有數據庫。

一旦我能夠證明它在那裏工作,我決定刪除我的臨時文件。之後,一切開始正常工作。所以,我的應用程序中出現了某種緩存問題。我使用了上面提到的相同的connectionString。

實際上,我使用了元數據「metadata = res://MyDomain/MyEntitities.csdl」的域名而不是*/MyEntities.csdl。我不打算很快改變域名。事實上,這正是可能導致某些問題的原因,因爲我更改了EF所在的MyEntities.Domain的位置,名稱和名稱空間。