Consideriamo il caso di un’applicazione n-layered:
– strato di Presentation;
– strato di Business Logic;
– strato DAL per l’accesso ai dati sfruttando Linq to Entity;
– strato dell’ObjectModel.
All’interno di quest’ultimo creiamo un modello sfruttando le potenzialità della nuova versione di Entity Framework 4 (EF4).
Può capitare di imbattersi nel seguente errore in fase di istanziazione dell’ObjectContext e quindi di connessione al db:
Unable to load the specified metadata resource
L’errore, nel mio caso, derivava da una non corretta valorizzazione dell’attributo MetaData dell’oggetto EntityConnectionStringBuilder.
Quando Visual Studio 2010 crea il modello per voi, parte dal presupposto che la stringa di connessione non venga usata in ambiente n-layered. Per questo motivo, la stringa di connessione avrà un aspetto del tipo:
res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl
Il problema si presenta nel momento in cui si cerca di istanziare l’ObjectContext da un altro strato dell’applicazione.
Ciò avviene perchè Res://*/ è un URI che punta alla risorsa nell’assembly corrente. Nel caso in cui, come detto, l’edmx del modello si trovi in un assembly diverso dal codice che si sta usando, res://*/ non riesce a risolvere la risorsa nella posizione corrente.
Basterà quindi specificare l’esatta posizione del Modello edmx:
res://ObjectModel/Model.csdl|res://*/
Model.ssdl|res://ObjectModel/Model.msl
(via stackoverflow)