2012-12-17 12 views
7

Questo è stato chiesto alcune volte ma non sono stato in grado di far funzionare nessuno dei suggerimenti per me.Windows Azure, Entity Framework. Parola chiave non supportata: "metadati".

Ho un sito Web e un database SQL che ho creato in locale e ora distribuito in Azure. Il database è una risorsa collegata al sito web. Sono in grado di navigare nel sito Web e sono persino in grado di connettermi ed eseguire query sul database utilizzando ADO.Net e una stringa di connessione standard.

Il problema si verifica quando provo a connettermi utilizzando Entity Framework. Continuo a ricevere la parola chiave non supportata: "metadati". Ho rimosso i set di record attivi multipli e ho provato a sostituire " con "ma non ha funzionato. Sono completamente bloccato per le idee.

+0

Potresti pubblicare la tua stringa di connessione completa (omettendo nome e password del server) e la versione di EF che stai utilizzando e l'approccio che stai utilizzando (ad es. CodeFirst, ModelFirst, DatabaseFirst). Quindi traccia stack esatta dell'errore.MARS non è un problema con SQL Azure da almeno 2 anni. – astaykov

+0

Siamo spiacenti. Tendo a dimenticare le cose alle 3 del mattino. Anch'io avevo già pronto da incollare. Sono stato in grado di risolvere questo problema sostituendo " con 'e anche modificando il tipo di connessione su personalizzato come indicato di seguito. –

risposta

18

Qui è la mia stringa di connessione definita nel portale Azure, per un approccio DatabaseFirst:

metadata=res://*/mySuperModel.csdl|res://*/mySuperModelModel.ssdl|res://*/mySuperModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=tcp:myServerName.database.windows.net,1433;Initial Catalog=myDatabaseName;User [email protected];Password=myPasswordHere;" 

Confronta con la vostra e notare che il tipo di connessione è "su misura" nel portale azzurro.

+0

Si noti che non ho MARS attivato nella mia stringa di connessione, ma è perché io uso SQL Azure Federation (che non supporta MARS). Con una normale connessione SQL Azure, è possibile attivarla in sicurezza. – JYL

+0

Grazie. Il mio problema era che il tipo di connessione non era cambiato. Impostando questo su ordinazione lo ha risolto. –

+0

Questo funziona - grazie !! Nota a tutti: andare su Azure> App Server, Impostazioni app ... Ho dovuto rimuovere l'inizio "e la fine" dalla connessione in elenco elencata! È così facile non notare questo piccolo dettaglio. Non lo vedi nell'esempio sopra, perché non dovrebbe essere lì. grazie ancora! – Neville

2

Ho avuto lo stesso problema dell'OP, ma la sua soluzione non ha funzionato per me.

Si trattava di un problema di stringhe di connessione, ma non delle virgolette.

Dal momento che mi ci sono voluti due giorni per risolvere, forse ciò contribuirà a qualcun altro:

La stringa di connessione che funziona [per il mio ASP.NET MVC 4.5/Entity Framework 5.0 applicazione quando ospitato su Azure (io sviluppo contro SQL Server 2012 localmente, ma migrare il database al database SQL di Azure (utilizzando SQL Database Migration Wizard)). Sto usando base di dati prima di creare il mio file .edmx (I generare il modello (dati) dal database)] è:

<add name="MYPROJECTENTITIES" connectionString="**metadata=**res://*/MODELS.MYPROJECTMODEL.csdl|res://*/MODELS.MYPROJECTMODEL.ssdl|res://*/MODELS.MYPROJECTMODEL.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=tcp:B6JD5K5EP4.database.windows.net,1433;Initial Catalog=MYPROJECT_DB;Integrated Security=False;User [email protected];Password=MYPASSWORDABC123;**MultipleActiveResultSets=True**;Encrypt=True;TrustServerCertificate=False&quot;" providerName="System.Data.EntityClient"/> 

Il testo in MAIUSCOLO è la mia informazioni Azure. Ovviamente, dovrai invece usare il tuo.

Questa parte della stringa di connessione mi ha dato incubi, e potrebbe essere la causa del problema così:

res://*/Models.MyProjectModel.csdl|res://*/Models.MyProjectModel.ssdl|res://*/Models.MyProjectModel.msl 

Tali domande devono essere esattamente a destra. Fammi ripetere: Questi riferimenti devono essere esattamente ragione !!

Dopo aver letto this article from 2008 ("stringhe di connessione Risoluzione dei problemi di Entity Framework"), ho usato .NET Reflector per guardare all'interno della MyProjectModel.dll (il nome del mio .dll (probabilmente diversa del progetto), come egli suggerisce e, certo abbastanza, la stringa di connessione (che è stata generata automaticamente dal Entity Framework!) era errata. Non includeva un prefisso. Non appena ho aggiunto il prefisso . (che è come .csdl/.msl/.ssdl è chiamato all'interno del mio file .dll (probabilmente diverso nel tuo)), tutto ha funzionato alla grande. Dai uno sguardo all'interno del tuo file .dll e verifica se i nomi corrispondono. Se così non fosse, cambiali in modo che corrispondano a ciò che appare nel file .dll. Leggi l'articolo sopra se quello che sto dicendo non è abbastanza chiaro.)

Problemi correlati