Sqldipendency non funziona con l'entità framework
-
27-10-2019 - |
Domanda
Ho un problema quando provo a iniziare la dipendenza da SQ.
L'errore mi informa: parola chiave non supportata: "metadati".
La stringa di connessioni è quanto segue quando viene recuperato dalla finestra immediata proprio prima che si blocchi.
?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\""
Ecco il codice. Si blocca sul metodo di avvio. Apparentemente, non pensa che le connessioni EF siano valide. Qualche idea di come posso usarlo correttamente?
YeagerTechEntities dbContext = new YeagerTechEntities();
ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
SqlDependency.Start(objectContext.Connection.ConnectionString);
Soluzione
Perché la stringa di connessione EF non è valida per SqlDependency
. Funziona solo con EntityConnection
ma SqlDependency
usi SqlConnection
. Pertanto è necessario utilizzare la stringa di connessione diretta nella stringa di connessione DBContext o estrarre la connessione della connessione entità.
O:
var connectionString = dbContext.Database.Connection.ConnectionString;
O
var connectionString = ((EnityConnection)objectContext.Connection).StoreConnection.ConnectionString;
Comunque EF non gioca molto bene con SqlDependency
. SQLDEpendency si aspetta di scrivere SQL chiede a te stesso e di averli sotto il tuo controllo.
Altri suggerimenti
In realtà, lo snippet di codice che l'ho fatto funzionare è il seguente:
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);
YearTecentità è la stringa di connessioni EF.