<add name="EXAMEntities2" connectionString="metadata=res://*/LiveModel.csdl|res://*/LiveModel.ssdl|res://*/LiveModel.msl;provider=System.Data.SqlClient;provider connection string="data source=xx.xx.xxx.xx;initial catalog=EXAM;user id=admin;multipleactiveresultsets=True"" providerName="System.Data.EntityClient" />
这是我的连接字符串不是有效的吗?
答案 0 :(得分:1)
您正在指定用户ID但没有密码。
<add name="EXAMEntities2" connectionString="metadata=res://*/LiveModel.csdl|res://*/LiveModel.ssdl|res://*/LiveModel.msl;provider=System.Data.SqlClient;provider connection string="data source=xx.xx.xxx.xx;initial catalog=EXAM;user id=admin;password=*****;multipleactiveresultsets=True;App=EntityFramework"" 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))