¿Por qué el objeto EntityConnection no contiene la contraseña de inicio de sesión?
Pregunta
Tengo una aplicación que usa EF CTP5.
En esta situación particular, necesito degradarme a algún ADO.NET clásico (para leer múltiples conjuntos de resultados en un procedimiento almacenado, que EF no es compatible).
Como tal, estoy tratando de usar el cadena de conexión existente desde el EntityConnection
Objeto, como este:
var ctx = (this as IObjectContextAdapter).ObjectContext;
var efCon = ((EntityConnection) (ctx.Connection)).StoreConnection;
var con = new SqlConnection(efCon.ConnectionString);
con.Open(); // exception thrown
Cuando debuge, veo que el ConnectionString
no contiene la contraseña, solo la fuente de datos, el nombre de usuario, la base de datos, etc.
¿Es esto algo de seguridad por qué lo han eliminado? ¿EF oculta la contraseña en alguna parte y solo la usa cuando ejecuta procedimientos almacenados en sí?
La cadena de conexión EF no es como las cadenas de conexión ADO.NET clásicas, ya que tiene información de metadatos.
Por lo tanto, parece que tendré que eliminar la parte de la cadena de conexión que necesito, ponerla en la web.config y pasarlo al repositorio.
¡Seguramente debe haber una mejor manera!
Solución
Intente agregar "Persist Security Info = True;" a la cadena de conexión de contexto. Esto funcionó para mí.