MetadataException: impossibile caricare la risorsa di metadati specificata


681

All'improvviso continuo ad avere MetadataExceptionun'istanza della mia ObjectContextclasse generata . La stringa di connessione in App.Config sembra corretta - non è cambiata dall'ultima volta che ha funzionato - e ho provato a rigenerare un nuovo modello (file edmx) dal database sottostante senza alcuna modifica.

Qualcuno ha qualche idea?

Ulteriori dettagli: non ho modificato alcuna proprietà, non ho cambiato il nome di alcun assembly di output, non ho provato a incorporare l'EDMX nell'assembly. Ho semplicemente aspettato 10 ore prima di lasciare il lavoro fino al mio ritorno. E poi non funzionava più.

Ho provato a ricreare l'EDMX. Ho provato a ricreare il progetto. Ho anche provato a ricreare il database, da zero. Nessuna fortuna.


14
Se una domanda SO su un prodotto specifico che ha oltre 200k visualizzazioni, il prodotto non funziona nel modo previsto dagli utenti. Mi piacerebbe vedere Microsoft affrontare questo. Ecco un link per dare loro suggerimenti se hai tempo: visualstudio.uservoice.com/forums/121579-visual-studio .
Tony L.,

Il mio problema è stato risolto, sostituendo la stringa di connessione copiata dal progetto db-layer.
Hardik,

Risposte:


857

Ciò significa che l'applicazione non è in grado di caricare EDMX. Ci sono diverse cose che possono causare questo.

  • È possibile che la proprietà MetadataArtifactProcessing del modello sia stata modificata in Copia nella directory di output.
  • La stringa di connessione potrebbe essere errata. So che dici di non averlo cambiato, ma se hai cambiato altre cose (per esempio, il nome di un assembly), potrebbe ancora essere sbagliato.
  • È possibile che si stia utilizzando un'attività post-compilazione per incorporare l'EDMX nell'assembly, che per qualche motivo non funziona più.

In breve, non ci sono abbastanza dettagli nella tua domanda per dare una risposta accurata, ma spero che queste idee ti portino sulla strada giusta.

Aggiornamento: ho scritto un post sul blog con passaggi più completi per la risoluzione dei problemi .


70
La stringa di connessione, nonostante i miei sforzi per confrontarla con un'utilità di confronto dei contenuti l'ultima volta, era errata.
J. Steen,

16
È stato il filo conduttore anche per me. Quando hai Test di Integrazione che hanno bisogno anche di connessione nel proprio App.config, le cose potrebbero non essere sincronizzate quando aggiorni il tuo edmx.
Ray,

11
OK, l'ho risolto semplicemente impostando "Incorpora"; compilando, quindi reimpostandolo sull'altro. Ciò ha risolto il mio problema.
Shimmy Weitzhandler,

6
Ho avuto lo stesso problema, ho provato la tua soluzione, volevo dare +1, ho capito che l'ho già fatto in passato. Non ricordo nemmeno di aver avuto questo problema prima;). Questa volta nel mio caso era una stringa di connessione corretta nella Libreria di classi con edmx e errata nell'applicazione Web quando veniva usata.
Episodex,

9
Guida fantastica. Per me, avevo copiato un'altra stringa di connessione che utilizzava res: // * / Database.MyModel2 ..., quando volevo davvero res: // * / MyModel1 ... (Il database è una cartella all'interno del mio progetto Test di integrazione)
emragins

361

Questo piccolo cambiamento aiuta a risolvere questo problema.

Ho una soluzione con 3 progetti.

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

cambia in

connectionString="metadata=res://*/;

11
Lo ha riparato per me, ma che diamine significa?
Lance Fisher,

18
@Lance: lo spiego in dettaglio in questo post del blog
Craig Stuntz,

4
@jocull: No, non funzionerà in molti casi e sarà lento in altri. Leggi il mio post sul blog per capire il perché.
Craig Stuntz,

6
Ho spostato il mio .edmx nella cartella Modello e ho dimenticato di aggiornare la stringa di connessione. Ottimo puntatore. Grazie. Mi ci sarebbero volute ore per capire.
Muruge,

11
Signore, avete salvato un povero impiegato Microsoft da un consumatore molto incazzato.
The Muffin Man,

115

È possibile ottenere questa eccezione quando Edmx si trova in un progetto e lo si utilizza da un altro.

Il motivo è Res://*/un uri che punta a risorse nell'assemblea ATTUALE. Se l'Edm è definito in un assembly diverso dal codice che lo sta utilizzando, res: // * / non funzionerà perché non è possibile trovare la risorsa.

Invece di specificare '*', devi fornire invece il nome completo dell'assembly (incluso il token di chiave pubblica). Per esempio:

res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...

Un modo migliore per costruire stringhe di connessione è con EntityConnectionStringBuilder:

public static string GetSqlCeConnectionString(string fileName)
{
    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlServerCe.3.5";
    csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

public static string GetSqlConnectionString(string serverName, string databaseName)
{
    SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();

    providerCs.DataSource = serverName;
    providerCs.InitialCatalog = databaseName;
    providerCs.IntegratedSecurity = true;

    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = providerCs.ToString();

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

Se si riscontra ancora l'eccezione, aprire l'assemblaggio in reflector e controllare i nomi dei file per i file .csdl, .ssdl e .msl. Quando le risorse hanno nomi diversi da quelli specificati nel valore dei metadati, non funzionerà.


8
Si prega di considerare che "YourEdmxFileName" deve essere il nome qualificato, ad esempio "YourNamespace.YourEdmxFileName", se si utilizzano gli spazi dei nomi nell'assembly. Tuttavia, è necessario rimuovere la parte dello spazio dei nomi uguale al nome dell'assembly.
Marcel,

5
MSDN dice che il secondo paragrafo è sbagliato. "Quando si utilizza il carattere jolly (*), Entity Framework deve cercare in tutte le assemblee le risorse con il nome corretto."
Craig Stuntz,

Sono abbastanza sicuro che lo spazio dei nomi non sia pertinente, ma lo è il percorso del file incorporato. Quindi, anche se si controlla il file * .Designer.cs del file edmx associato e si nota che lo spazio dei nomi della classe generata automaticamente è MyCompany ... qualunque cosa, non è ciò che si dovrebbe usare. Al contrario, il percorso è nome dell'assembly, nome / i della cartella / e delle cartelle della soluzione. Ad esempio: "metadata = res: // * / EntityModels. <nomefile> .csdl |" + "res: // * / EntityModels. <nomefile> .ssdl |" + "res: // * / EntityModels. <nomefile> .msl;"
Daniel,

1
@Daniel, questo è per lo più corretto, ma nota che lo spazio dei nomi e il percorso del file incorporato sono talvolta uguali. Devi essere sicuro di Reflector (o alternativa gratuita a quello).
Craig Stuntz,

sembra che funzioni usando solo il nome dell'assembly, senza versione, publickeytoken, ecc. Come:res://MyAssembly/folder.<filename>.csdl...
Ivan Ferrer Villa,

67

Ho avuto un errore simile. Avevo ricreato il progetto (lunga storia) e ho ritirato tutto dal vecchio progetto. Non mi ero reso conto che il mio modello era già stato in una directory chiamata "Modello", e ora era in una directory chiamata "Modelli". Dopo aver modificato la connessione nel mio Web.Config da questo:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

a questo:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

Tutto ha funzionato (cambiato Modelin Models). Nota che ho dovuto cambiare questi tre punti in questa stringa.


2
Ho spostato il mio modello Entity Framework da Model a DAL. Ma poi quando ho scritto un test (una settimana dopo) nel progetto di test per testare il predicatobuilder Linq. Ho ricevuto questo errore. Ho corretto App.config dei progetti di test con come appariva nel web.config del progetto principale, come hai detto in tre punti. Quindi la tua semplice risposta mi ha portato in pista.
Patrik Lindström,

Sì, grazie - controlla i tuoi nomi di file. In qualche modo avevo il vecchio nome.
PeterX,

7
C'è una differenza tra i due ?!
Erwin Rooijakkers,

2
@ErwinRooijakkers Model vs ModelS
Marc

Capito di aver fatto lo stesso dopo aver letto il blog di Craig, ma +1 per l'apprendimento è importante ricordare che le modifiche apportate nella libreria di classi "entità" non vengono eseguite automagicamente nei file di configurazione dei progetti che fanno riferimento a esso. / sospiro Sono contento di non essere solo.
ruffin

26

E un modo rapido per controllare il nome del modello senza Reflector .... cerca la directory

... obj / {config output} / edmxResourcesToEmbed

e controlla che i file di risorse .csdl, .msl e .ssdl siano presenti. Se si trovano in una sottodirectory, il nome della sottodirectory deve essere anteposto al nome del modello.

Ad esempio, i miei tre file di risorse si trovano in una sottodirectory Data , quindi la mia stringa di connessione doveva essere

metadata = res: // * / Data .MyModel.csdl | res: // * / Data .MyModel.ssdl | res: // * / Data .MyModel.msl;

(rispetto ai metadati = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).


Questo era ESATTAMENTE il mio problema. Ho perso diverse ore su questo. Grazie mille per questa semplice spiegazione
Fernando Carvalhosa,

Ottima risposta, in realtà spiega come trovare la tua stringa. E mostra che le sottocartelle hanno "." come delimitatori e non "\" o "/".
cjb110,

16

Ho anche avuto questo problema ed era perché la stringa di connessione nel mio web.config era leggermente diversa da quella nella app.config dell'assembly in cui si trova il mio EDMX. Non ho idea del perché sia ​​cambiato, ma qui ci sono due diverse versioni.

App.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SMCSModel.csdl|res://*/Model.SMCSModel.ssdl|res://*/Model.SMCSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

web.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SCMSModel.csdl|res://*/Model.SCMSModel.ssdl|res://*/Model.SCMSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Ciò che risolveva era semplicemente copiare la stringa app.config (notare la piccola differenza alla fine - invece di " App=EntityFramework" voleva " application name=EntityFramework") in web.config e il problema è stato risolto. :)


1
Grazie, questo era davvero il mio problema. Ho avuto 1 progetto che accedeva a DB con EF e un altro progetto WCF. Dopo aver cambiato il nome del primo progetto, connectionString è stato modificato in App.config del mio primo progetto. Quindi ho dovuto cambiare la connessioneString anche nel progetto WCF nel web.config :)
Volkan,

Dalla documentazione MSDN su docs.microsoft.com/en-us/dotnet/framework/data/adonet/… : le The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.stringhe di connessione di Entity Framework non condividono tale flessibilità, quindi è necessario utilizzare solo le parole chiave che si aspetta.
Suncat2000,

13

Questo mi è successo quando ho accidentalmente cambiato l'azione di costruzione del file edmx (appare in Proprietà nell'IDE) da "EntityDeploy" a "Nessuno". EntityDeploy è ciò che popola i metadati per te: vedi http://msdn.microsoft.com/en-us/library/cc982037.aspx


Questa era la mia soluzione: ho rinominato il mio edmx in .old mentre l'ho copiato e stavo provando alcune cose, dopo che quando l'ho rinominato in Build Action lo ho impostato su nessuno e quindi ho ottenuto questo errore, riportandolo su EntityDeploy risolto il mio problema :)
eth0

Avevo spostato il mio file EDMX in un'altra cartella e ho dovuto modificare l'azione di generazione per aggiornare anche i nomi delle risorse incorporate. Grazie!
David,

Questa era la soluzione per me; Avevo perso questa impostazione durante il processo di aggiornamento a .NET Standard. Grazie per avermi salvato la salute mentale!
NetherGranite,

11

Questo succede a me quando non pulisco la soluzione prima di creare un nuovo designer .edmx. Quindi non dimenticare di pulire la soluzione prima di creare un nuovo designer .edmx. Questo mi aiuta a saltare molti più problemi con questo. Di seguito i dettagli di navigazione forniti nel caso in cui tu sia nuovo in Visual Studio.

Fai clic su-> Crea-> Soluzione pulita

Quindi fare clic-> Crea-> Ricostruisci soluzione

Spero che sia di aiuto. Grazie a tutti


8

Ho appena trascorso 30 minuti felici con questo. Avevo rinominato l'oggetto entity, rinominato la voce nel file config, ma c'è di più ... devi cambiare anche il riferimento al csdl

molto facile da perdere - se stai rinominando, assicurati di avere tutto ....


6

Ho avuto lo stesso problema. Ho esaminato la mia dll osservata con reflector e ho visto che il nome della risorsa non era giusto. Ho rinominato e ora sembra a posto.


6

Nel mio caso, si risolve modificando le proprietà del file edmx.

  1. Apri il file edmx
  2. Fare clic con il tasto destro su un punto qualsiasi del designer EDMX
  3. scegli proprietà
  4. update Proprietà chiamata "Elaborazione artefatto metadati" in "Incorporato nell'assieme di output"

questo ha risolto il problema per me. Il problema è che quando il contenitore tenta di trovare i metadati, non riesce a trovarlo. quindi semplicemente fallo nello stesso assemblaggio. questa soluzione non funzionerà se i file edmx sono presenti in un altro assembly


+1.000.000 questo è stato il problema di fondo per me oggi. Dolori della riorganizzazione degli spazi dei nomi di prodotti e del consolidamento di assiemi.
Mike,

6

Ho trascorso un'intera giornata su questo errore

se lavori con n-tear architecture

o hai provato a separate Modelsgenerare dal EDMXmodulo DataAccessLayer aDomainModelLayer

forse otterrai questo errore

  1. Il primo passaggio per la risoluzione dei problemi consiste nell'assicurarsi che la stringa di connessione sia uguale webconfig (UILayer)e appconfig (DataAccessLayer)uguale
  2. In secondo luogo, che è molto importante il connection string

    connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid.....

    qual è il problema

da dove Modeldiavolo ho preso o qualunque cosa .csdl nella mia stringa di connessione dove sono

qui io la nostra soluzione guarda l'immagine

inserisci qui la descrizione dell'immagine

spero che ti aiuti


5

Sono stato in grado di risolverlo in Visual Studio 2010, VB.net (ASP.NET) 4.0.

Durante la procedura guidata del modello di entità, sarà possibile visualizzare la stringa di connessione dell'entità. Da lì puoi copiare e incollare la stringa di connessione.

L'unica cosa che mi mancava era "App_Code". nella stringa delle connessioni.

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"

Sfortunatamente, la stringa di connessione nella procedura guidata non è corretta per app.config. @leqid ha suggerito un buon modo per correggere il percorso del modello.
Der_Meister

5

Dopo ore di ricerche su Google e tentando di risolvere nessuna delle soluzioni suggerite ha funzionato. Ho elencato diverse soluzioni qui. Ho anche notato quello che ha funzionato per me. (Stavo usando EF versione 6.1.1 e SQL server 2014 - ma un vecchio DB)

  1. Ricostruire il progetto e riprovare.
  2. Chiudi e apri VS - Non so come funzioni
  3. assicurati di aver inserito il file .EDMX in una directory, assicurati di includere le directory in ConnectionString. per esempio il mio è nella cartella DAL. Quindi sembra così: connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;(questi sono file. Per vederli puoi attivare Mostra tutti i file in Esplora soluzioni, nella directory ~ / obj / ..)

... e molti altri che avevo provato [come: ripristinare la versione EntityFramework a una versione successiva (non sono sicuro)]


cosa ha funzionato per me:

da questo articolo qui , mi ha aiutato a risolvere il mio problema. Ho appena cambiato la mia ProviderManifestToken="2012"a ProviderManifestToken="2008"nel file EDMX. Per farlo:

Esploratore di soluzioni

  1. Fare clic con il tasto destro del mouse sul file .edmx
  2. Aperto con..
  3. Editor XML
  4. Change ProviderManifestToken = "XXXX" con 2008

Spero che aiuti.


Di recente ho avuto questo problema dopo aver apportato apparentemente nessuna modifica. Ho provato a riavviare VS senza alcun risultato, ma poi è stato risolto pulendo e ricostruendo. Quindi, per gli altri, se non hai apportato modifiche e nulla del resto sembra rilevante, allora prova a ripulire / ricostruire.
Greg,

5

Se si utilizza edmx da un altro progetto, quindi nella stringa di connessione, modificare ...

metadata=res://*/Data.DataModel.csdl

...per...

metadata=res://*/DataModel.csdl

Questo è vero, se si desidera spostarlo nella nuova sottocartella del progetto, è necessario aggiungere il folder.subfolderprecedente.
Qakmak,

Grazie, questa soluzione ha funzionato per me. Avevo spostato il mio file .edmx da una directory in un progetto alla radice di un altro progetto e avevo bisogno di rimuovere il nome della directory da tutte le stringhe di connessione attraverso la mia soluzione.
Chris,

4

La soluzione definitiva (anche dopo aver ricreato il database su altre due macchine, oltre a EDMX e altri articoli vari) era di non utilizzare la prima edizione di Entity Framework. Non vedo l'ora di valutarlo di nuovo in .NET 4.0.

Dopo aver riscontrato di nuovo lo stesso problema e aver cercato una risposta dappertutto, ho finalmente trovato qualcuno che aveva avuto lo stesso problema. Sembra che la stringa di connessione non sia stata generata correttamente dalla procedura guidata di Visual Studio e che al collegamento alle risorse dei metadati mancasse un percorso importante.

v1.0 BUG ?: Impossibile caricare la risorsa di metadati specificata. Script! = Modelli

Aggiornamento 2013-01-16 : dopo essere passati quasi esclusivamente all'utilizzo delle pratiche First Code di EF (anche con database esistenti) questo problema non è più un problema. Per me, questa era una soluzione praticabile per ridurre il disordine da codice e configurazione generati automaticamente e aumentare il mio controllo sul prodotto.


4

Il mio problema e la mia soluzione, i sintomi erano gli stessi "Impossibile caricare la risorsa di metadati specificata" ma la causa principale era diversa. Avevo 2 progetti in soluzione uno era EntityModel e l'altro la soluzione. In realtà ho eliminato e ricreato il file EDMX in EntityModel.

La soluzione era che dovevo tornare al progetto Applicazione Web e aggiungere questa riga nel file di configurazione. Il nuovo modello aveva modificato alcuni elementi che dovevano essere duplicati nel file Web.Config del "altro" progetto. La vecchia configurazione non era più valida.

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

4

A volte vedo questo errore nel mio progetto. Lo risolvo da

1 - Fare clic destro sul file EDMX

2 - Seleziona l' Run Custom Toolopzione

3 - Ricostruisci progetto


Questo ha funzionato per me, ma ho anche dovuto ricostruire in seguito
rans

3

Nel mio caso, questo problema era legato alla ridenominazione del file edmx del mio modello ... la correzione della stringa di connessione app.config per i file csdl / ssdl / msl ha risolto il mio problema.

Se stai utilizzando il designer EF 4.0 per generare il tuo csdl / ssdl / msl, questi 3 "file" verranno effettivamente memorizzati nel file edmx principale del modello. In questo caso, il post di Waqas è praticamente nel segno. È importante capire che "Model_Name" nel suo esempio dovrà essere cambiato in qualunque sia il nome corrente del file .edmx del tuo modello (senza .edmx).

Inoltre, se il tuo file edmx non è al livello principale del tuo progetto, devi prefigurare Model_Name con il relativo percorso, ad es.

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

specifica che csdl / ssdl / msl xml è archiviato nel file modello "WidgetModel.edmx" che è archiviato in una cartella denominata "MyModel".


3

Ho scritto questa classe di supporto per creare istanze di oggetti ObjectContext quando sono definiti in un progetto diverso rispetto al progetto che lo utilizza. Analizzo la stringa di connessione nel file di configurazione e sostituisco '*' con il nome completo dell'assembly.

Non è perfetto perché usa la riflessione per costruire l'oggetto, ma è il modo più generico di farlo che ho trovato.

Spero che aiuti qualcuno.

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}

3

Per tutti voi SelftrackingEntitiesutenti, se avete seguito Microsoft Walk-through e avete separato la classe di contesto Object nel progetto di servizio wcf (collegandovi al contesto .tt), questa risposta è per voi:

parte delle risposte mostrate in questo post che include codice come:

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

NON FUNZIONA PER TE !! il motivo è che YourObjectContextType.Assemblyora risiede in un altro Assembley (all'interno dell'assembly del progetto wcf),

Quindi dovresti sostituire YourObjectContextType.Assembly.FullName con ->

ClassTypeThatResidesInEdmProject.Assembly.FullName 

divertiti.


2

Ho avuto problemi con questo stesso messaggio di errore. Il mio problema è stato risolto chiudendo e riaprendo Visual Studio 2010.


2

Ho avuto lo stesso problema perché ho rinominato un assembly.

Ho anche dovuto rinominarlo negli attributi AssemblyTitle e AssemblyProduct nel progetto Properties / AssemblyInfo.cs, nonché eliminare e aggiungere nuovamente il riferimento al file edmx.

Quindi ha funzionato bene.


2

Con lo stesso problema ho ricreato edmx dal database. Risolve il mio problema


2
Purtroppo questo affronta e tratta il sintomo, non la causa.
Clarice Bouwer,

2

L'eccezione è dovuta al fatto che il compilatore punta a metadati inesistenti, quindi copia solo stringhe di app.config connessione in Web.configConnectionString


1

Ho anche avuto lo stesso problema e la stessa soluzione di Rick, tranne per il fatto che stavo importando un .edmx esistente in un nuovo progetto, e mentre lo spazio dei nomi di base non importava, era importato in una sottodirectory diversa, quindi dovevo anche aggiornare la connessione stringa all'interno di Web.Config in tre posizioni, per includere la diversa denominazione della sottodirectory:


1

Ho avuto lo stesso problema con una soluzione che conteneva progetti in una cartella soluzione, quando sono stati spostati nel root della soluzione (al fine di superare un bug sospetto con Mvc3AppConverter a causa delle posizioni del progetto).

Sebbene la soluzione sia stata compilata dopo che tutti i riferimenti * del progetto sono stati aggiunti di nuovo quando necessario, l'errore è stato generato quando il sito Web è stato attivato.

L'EDMX si trova in uno dei progetti che sono stati spostati (il progetto "Dati"), ma ovviamente la mancanza di un riferimento al progetto Dati non ha causato un errore di compilazione, ma solo un errore di runtime.

La semplice aggiunta del riferimento mancante al progetto primario ha risolto questo problema, non è necessario modificare affatto la connessione.

Spero che questo aiuti qualcun'altro.


1

Per quanto mi riguarda, avevo separato il livello di accesso ai dati e il livello dell'interfaccia utente. Quindi ho una stringa di connessione entità per ogni livello.

Prima di modificare queste due stringhe di connessione separate in modo che fossero uguali, ho ancora riscontrato l'errore seguente.

Unable to load the specified metadata resource

Quindi faccio le stesse stringhe di connessione per quei due livelli (DAL, UI), Funziona perfettamente.

La mia soluzione è di rendere tutte le stringhe di connessione uguali, indipendentemente da dove siano già state presentate .


1

Ho avuto questo problema ieri e stavo guardando il mio codice nel debug e l'output di SQL Profiler.

Quello che non riuscivo a capire, prima di leggere e comprendere questo post, era il motivo per cui EntityFramework stava lanciando questo errore mentre chiamava il DB. Stavo esaminando centinaia di righe in SQL Profiler cercando di capire cosa non andava nel modello di database. Non riuscivo a trovare nulla di simile alla chiamata che mi aspettavo, e ad essere sincero non ero sicuro di cosa stavo cercando.

Se ti trovi in ​​questa posizione, controlla la stringa di connessione. La mia ipotesi è che prima che EntityFramework crei il suo SQL controllerà il modello, specificato nella parte dei metadati della stringa di connessione. Nel mio caso era sbagliato. EntityFramework non riusciva nemmeno a raggiungere il DB.

Assicurati che i nomi siano corretti. Una volta risolto il problema, ho visto le chiamate in SQL Profiler in cui ApplicationName era "EntityFramework" con SQL che chiamava le tabelle previste.


1

Un file app.config o web.config scadente può farlo. Avevo copiato la stringa di connessione app.config sul mio web.config nella mia IU e ho finito per inserire:

<connectionStrings>
    <connectionStrings>
          <add name="name" connectionString="normalDetails"/>
    </connectionStrings>
</connectionStrings>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.