0

我找不到我的 connectionString 语法是如何错误的。谁能建议一种方法来解决这个问题?我在将 EF 与我的连接字符串一起使用时遇到了困难。我是 EF 的新手。

  • 我正在使用 Sybase Anywhere 12 数据库。
  • 我在 Web 应用程序引用的单独类库中使用 Table-First ObjectContext 和 EDMX。
  • 我在我的类库中使用 Ninject 模块来绑定我的存储库。
  • 我正在使用一个名为“Test”的 ODBC DataStore
  • 其他信息 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>

当我在我的存储库中初始化我的 Entity/ObjectContext 时(参见下面的 using 语句),它返回一个错误:“在配置中找不到指定的命名连接,不打算与 EntityClient 提供程序一起使用,或者无效。”

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

我在调试器上打开了 CLR 异常,发现代码在 .NET Framework 中抛出了错误:

实体连接.cs

effectiveConnectionOptions = new DbConnectionOptions(setting.ConnectionString, EntityConnectionStringBuilder.Synonyms, false);

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();
        }

我可以在那里看到我的连接字符串,因此很难解析连接字符串。我尝试了许多不同的语法排列,但没有找到它接受的任何内容,包括:

  • 显式命名实体文件的程序集而不是通配符(例如 metadata=res://MyDomain/MyEntities.csdl...)
  • 使用 Sybase 友好的 ODBC 属性,例如 UID 代替 UserID、PWD 代替 Password,以及 DBN 代替 DataSourceName。

谢谢。

4

1 回答 1

0

我让一切正常,我能想到的唯一原因是我删除了我的 ASP .NET 4.0 临时文件。另外,我必须补充一点,我将我的流程从使用集成测试来测试这一部分更改为使用单元测试。我没有先做单元测试,因为我们的构建服务器上没有数据库。

一旦我能够证明它在那里工作,我决定删除我的临时文件。在那之后,一切都开始正常工作。因此,我的应用程序中出现了某种缓存问题。我使用了上面提到的相同的连接字符串。

实际上,我使用了元数据的域名“metadata=res://MyDomain/MyEntitities.csdl”而不是*/MyEntities.csdl。我不打算很快更改域。事实上,这正是可能导致某些问题的原因,因为我更改了 EF 所在的 MyEntities.Domain 的位置、名称和命名空间。

于 2012-12-06T21:07:11.880 回答