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);
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top