2010-09-29 16 views
39

Sto utilizzando Entity Framework 4 per una semplice applicazione e vorrei cuocere le mie credenziali di connessione nella seguente stringa di connessione:Come includere la e commerciale nella stringa di connessione?

<connectionStrings> 
    <add name="MyEntities"  
     connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost\DEV;Initial Catalog=MyDB;UserId=myUser;Password=jack&jill;MultipleActiveResultSets=True&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 

Tuttavia, la password (che non posso cambiare) contiene una e commerciale. ASP.NET getta: Configuration Error: An error occurred while parsing EntityName. Line XX, position YYY.

Se sostituisco la e commerciale nella password con &amp;, ho un SqlException: Login failed for user 'myUser'. Di solito questo trucco funziona, ma credo che qualcosa sta fallendo perché questo è tecnicamente una stringa di connessione all'interno di una connessione stringa.

Cosa devo fare qui? La maggior parte delle mie classi includono il codice come:

using (var context = new MyEntities()) { 
    // do work 
} 

Aggiornamento: Si scopre che le credenziali sto usando sono un account di dominio, così che cosa ho veramente bisogno è Integrated Security=True nella stringa di connessione piuttosto che un parola d'ordine.

Codificare la e commerciale come indicato nella risposta accettata dovrebbe funzionare, anche se non l'ho provato.

risposta

75

È necessario utilizzare sequenze di escape come si farebbe per qualsiasi documento XML, ovvero tutti i file .config.

  • E commerciale = & = &amp;
  • Maggiore di => = &gt;
  • Minore di = < = &lt;
  • Apostrophe = '= &apos;
  • quote = "= &quot;

È inoltre possibile utilizzare CDATA tag in modo da poter utilizzare questi caratteri illegali

<![CDATA[ e termina con ]]>

<connectionStrings> 
    <add name="MyEntities" connectionString=" 
     metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl; 
     provider=System.Data.SqlClient; 
     provider connection string=&quot; 
     Data Source=localhost\DEV; 
     Initial Catalog=MyDB;UserId=myUser; 
     Password=<![CDATA[jack&jill]]>; 
     MultipleActiveResultSets=True&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 
+0

Ho già provato questo, come notato nella mia domanda. Sembra che la password errata sia inviata insieme a Entity Framework. – user403830

+0

Questo dovrebbe essere tutto ciò che serve per farlo funzionare. – hunter

+0

Inoltre, prova ad accedere a quell'istanza di SQL Server utilizzando le credenziali nella tua connessione senza l'applicazione – hunter

0

…this is technically a connection string inside a connection string

Hai provato a fuggire due volte?

&amp;amp; 
Problemi correlati