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);
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top