ho intenzione di buttare via un'altra risposta, nel caso in cui qualcun altro corre in questo attraverso lo stesso scenario strano come ho fatto io.
Per iniziare, come altri hanno già detto, le stringhe di connessione ADO e le stringhe di connessione EF sono diverse.
Un ADO stringa di connessione contiene una serie di campi separati da virgola, che può molto da un tipo di connessione a un altro, ma di solito si vede "Data Source = xxx", "iniziale Catalogo = yyy", ecc Si farà non vedere "metadata = zzz".
Una stringa di connessione EF ha la stessa struttura, ma ha un "metadata = zzz" e una "provider connection string = www", dove "www" è una stringa di connessione ADO con escape.
Quindi un formato normale per una stringa di connessione ADO è:
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True
Mentre un formato normale per una stringa di connessione EF è:
metadata=res://*/MyDbContext.csdl|
res://*/MyDbContext.ssdl|
res://*/MyDbContext.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True;
application name=EntityFramework
"
maggior parte delle persone che sono in esecuzione in questo problema sembrano aver tagliato una stringa di connessione EF e incollata in una posizione che necessitava di una stringa di connessione ADO. In sostanza, ho fatto la stessa cosa, ma il processo non era chiaro come tutto ciò.
Nel mio caso, avevo un'applicazione Web che utilizzava EF, quindi il suo web.config conteneva correttamente stringhe di connessione EF.
Ho pubblicato un pacchetto di distribuzione e il processo richiede all'utente di specificare le stringhe di connessione da utilizzare durante la distribuzione. Questi sono memorizzati nel file SetParameters.xml generato dal pacchetto di distribuzione.
Ho tagliato e incollato le stringhe di connessione EF nei campi di immissione della finestra di dialogo di pubblicazione.
Ho distribuito l'applicazione Web, ho provato ad accedervi e ho ricevuto l'errore "Parola chiave non supportata: metadati".
Quello che non ho capito è che lo strumento di pubblicazione di MS prevedeva una stringa di connessione ADO e che, dato che avrebbe costruito una stringa di connessione EF.
Il risultato è stato che SetParameters.xml e il mio web.config schierato avevano stringhe di connessione che si presentava così:
metadata=res://*/MyDbContext.csdl|
res://*/MyDbContext.ssdl|
res://*/MyDbContext.msl;
provider=System.Data.SqlClient;
provider connection string="
metadata=res://*/XxDbContext.csdl|
res://*/XxDbContext.ssdl|
res://*/XxDbContext.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True;
application name=EntityFramework
"
""
In altre parole, la stringa di connessione fornitore incorporato era una stringa di connessione EF e non un ADO stringa di connessione, quindi quando EF ha provato a utilizzarlo per connettersi al database, ha generato questo errore.
In altre parole, quando si incollano le stringhe di connessione nei dialoghi di pubblicazione, è necessario incollare una stringa di connessione ADO, non una stringa di connessione EF, anche se ciò che si ha nel web.config da cui si sta copiando è una stringa di connessione EF.
È possibile estrarre una stringa di connessione ADO dal campo stringa di connessione del provider di una stringa di connessione EF, ed è ciò che è necessario, se si utilizza la stessa connessione nella distribuzione come si è fatto nello sviluppo locale.
hai provato a collegarti manualmente? hai confermato le credenziali in questo modo? –