0
<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" />

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

4

2 回答 2

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" />
于 2012-07-11T20:01:22.487 回答
0

我不喜欢将整个实体框架连接字符串存储在任何.config文件中,它太不可读了。因此,我编写了一个方法,将标准字符串转换为有效的实体框架连接字符串:

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))
于 2012-07-11T20:06:44.810 回答