2

给定以下连接字符串:

<add name="PrimaryDBConnectionString" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=10.1.1.101;Initial Catalog=primary;Persist Security Info=True;User ID=myuserid;Password=mypassword;MultipleActiveResultSets=True;Application Name=EntityFramework&quot;" />

我尝试使用以下内容在我的 DAL 中打开连接:

        using (PrimaryDBContext ctx = new PrimaryDBContext(ConfigurationManager.ConnectionStrings["PrimaryDBConnectionString"].ToString()))
        {
            try
            {
                ctx.Connection.Open();
                var result = ctx.sq_newsfeed_GetProfileByID(profileID);

我得到的错误是:

基础提供程序在打开时失败

我弄乱了 EF 连接字符串,并用“metadata=res://*/;”替换了所有提供程序前缀的东西 但还是不行。

任何人都可以对此有所了解吗?

谢谢。

- 更新 -

感谢您的回复...我最终只是从 UI 创建了一个新的数据库连接并修改了连接字符串以满足我的需求:

<add name="PrimaryEntities" connectionString="metadata=res://*/PrimaryModel1.csdl|res://*/PrimaryModel1.ssdl|res://*/PrimaryModel1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=10.99.108.42;initial catalog=primary;user id=dbuserID;password=somepw;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我保留了元数据部分。诀窍是确保您的 .csdl、.ssdl 和 .msl 文件名前缀与您的数据库上下文相匹配。

4

1 回答 1

2

您是否使用 Code First/DbContext(您的问题在 entity-framework-4.1 下提交)?如果是这样,那么您的连接字符串应该只是一个常规连接字符串 - 如下所示:

<add name="PrimaryDBConnectionString" providerName="System.Data.SqlClient"  connectionString="Data Source=(localdb)\v11.0;Initial Catalog=squirtprimary;Persist Security Info=True;Integrated Security=true;MultipleActiveResultSets=True;Application Name=EntityFramework" />    

(您也不必对配置管理器施展魔法 - 您可以像这样向您的 ctor 提供连接字符串的名称:

"name=PrimaryDBConnectionString"

它应该工作)

另一方面,如果您使用的不是 DbContext 而是 ObjectContext(您得到的异常将表明这一点 - 您没有得到说明您的连接字符串错误或缺少 providerName 参数的异常)。然后您需要检查是否能够在没有 EF 的情况下连接到数据库。一些提示:

  • 您使用 IP 地址作为数据源 - 如果这是远程服务器,您确定您启用了接受外部客户端吗?(AFAIR 默认情况下在 Sql Server 中禁用此功能)
  • 您正在使用用户/密码进行身份验证 - 您确定这些是正确的

检查上述内容的方法之一是在您的计算机上打开 Sql Server Management Studio 并提供您在连接字符串中的数据。

您看到的异常并不表示元数据部分有任何问题。它特别是关于无法打开与数据库的连接。

于 2012-06-22T19:09:48.293 回答