我正在将Entity Framework 4用于一个简单的应用程序,并希望将我的连接凭据烘焙到以下连接字符串中:
<connectionStrings>
<add name="MyEntities"
connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost\DEV;Initial Catalog=MyDB;UserId=myUser;Password=jack&jill;MultipleActiveResultSets=True""
providerName="System.Data.EntityClient" />
</connectionStrings>
但是,密码(我无法更改)包含&符号。 ASP.NET抛出:
Configuration Error: An error occurred while parsing EntityName. Line XX, position YYY.
如果我用&
替换密码中的&符号,我得到一个SqlException: Login failed for user 'myUser'.
通常这个技巧有效,但我猜测某些东西失败了,因为这在技术上是连接中的连接字符串字符串。
我该怎么办?我的大多数课程都包含以下代码:
using (var context = new MyEntities()) {
// do work
}
更新:事实证明我使用的凭据是域帐户,因此我真正需要的是连接字符串中的Integrated Security=True
而不是密码。
按照接受的答案中的指示对&符号进行编码可以正常工作,但我还没有测试过。
答案 0 :(得分:88)
您需要像使用任何XML文档一样使用转义序列,这是所有的.config文件。
&
>
<
'
"
您还可以使用CDATA
标记,以便使用这些非法字符
<![CDATA[
,以]]>
<connectionStrings>
<add name="MyEntities" connectionString="
metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;
provider=System.Data.SqlClient;
provider connection string="
Data Source=localhost\DEV;
Initial Catalog=MyDB;UserId=myUser;
Password=<![CDATA[jack&jill]]>;
MultipleActiveResultSets=True""
providerName="System.Data.EntityClient" />
</connectionStrings>