2012-12-05 62 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的位置,名称和名称空间。