提供商提供的EF连接错误在打开时失败

时间:2012-07-11 19:46:38

标签: asp.net entity-framework connection-string

<add name="EXAMEntities2" connectionString="metadata=res://*/LiveModel.csdl|res://*/LiveModel.ssdl|res://*/LiveModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xx.xx.xxx.xx;initial catalog=EXAM;user id=admin;multipleactiveresultsets=True&quot;" providerName="System.Data.EntityClient" />

这是我的连接字符串不是有效的吗?

2 个答案:

答案 0 :(得分:1)

您正在指定用户ID但没有密码。

<add name="EXAMEntities2" connectionString="metadata=res://*/LiveModel.csdl|res://*/LiveModel.ssdl|res://*/LiveModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xx.xx.xxx.xx;initial catalog=EXAM;user id=admin;password=*****;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

答案 1 :(得分:0)

我不喜欢将整个实体框架连接字符串存储在任何.config文件中,它是如此难以理解。所以我编写了一个方法,将标准字符串转换为有效的entityframework连接字符串:

private static string GetEntityConnectionString(string connectionString, 
                                                Type contextType)
{
    string result = string.Empty;

    string prefix = contextType.Namespace
                               .Replace(contextType.Assembly
                                                   .GetName()
                                                   .Name, 
                                        string.Empty);

    if (prefix.Length > 0
        && prefix.StartsWith("."))
    {
        prefix = prefix.Substring(1, prefix.Length - 1);
    }

    if (prefix.Length > 1
        && !prefix.EndsWith("."))
    {
        prefix += ".";
    }

    EntityConnectionStringBuilder csBuilder 
      = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = connectionString.ToString();
    csBuilder.Metadata = string.Format("res://{0}/{1}.csdl|"
                                       + "res://{0}/{1}.ssdl|"
                                       + "res://{0}/{1}.msl",
                                       contextType.Assembly.FullName,
                                       prefix + contextType.Name);
    result = csBuilder.ToString();
    return result;
}

现在您在配置文件中获得了一个很好的连接字符串:

<add name="MyDbConnectionname" 
     connectionString="Data Source=localhost\sqlexpress;Integrated Security=SSPI;MultipleActiveResultSets=true" 
     providerName="System.Data.SqlClient" />

你称之为:

var db = new DbContext(
               DbContext.GetEntityConnectionString(connectionString,
                                                   typeof(DbContext))