SqlDependency no funciona con el marco de la entidad
-
27-10-2019 - |
Pregunta
Tengo un problema al intentar comenzar la SqlDependency.
El error me informa: palabra clave no es compatible: 'metadatos'.
El ConnectionString es lo siguiente cuando se recupera de la ventana inmediata justo antes de que se bloquee.
?objectContext.Connection.ConnectionString
"metadata=res://*/YeagerTech.csdl|res://*/YeagerTech.ssdl|res://*/YeagerTech.msl;provider=System.Data.SqlClient;provider connection string=\"data source=Bill-PC;initial catalog=YeagerTech;integrated security=True;multipleactiveresultsets=True;App=EntityFramework\""
Aquí está el código. Se bloquea en el método de inicio. Aparentemente, no cree que el EF ConnectionString sea válido. ¿Alguna idea de cómo puedo usar esto correctamente?
YeagerTechEntities dbContext = new YeagerTechEntities();
ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
SqlDependency.Start(objectContext.Connection.ConnectionString);
Solución
Porque la cadena de conexión EF no es válida para SqlDependency
. Funciona solo con EntityConnection
pero SqlDependency
usos SqlConnection
. Por lo tanto, debe usar una cadena de conexión directa en su DBContext o extraer cadena de conexión de base de datos de Entity Connection.
O:
var connectionString = dbContext.Database.Connection.ConnectionString;
O
var connectionString = ((EnityConnection)objectContext.Connection).StoreConnection.ConnectionString;
De todos modos, EF no juega muy bien con SqlDependency
. SqlDependency espera que escriba consultas SQL y las tenga bajo su control.
Otros consejos
En realidad, el fragmento de código que hice funcionar es el siguiente:
YeagerTechEntities dbContext = new YeagerTechEntities();
ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
Application["dbContext"] = dbContext;
objectContext.Connection.ConnectionString =
ConfigurationManager.ConnectionStrings["YeagerTechEntities"].ConnectionString;
SqlDependency.Start(((System.Data.EntityClient.EntityConnection)objectContext.Connection)
.StoreConnection.ConnectionString);
YeAgertechEntities es el EF Connectionstring.