Perché una connessione a Entity Framework richiede una proprietà di metadati?

connection connection-string data-access-layer database entity-framework

Domanda

Ho spostato il mio DAL dall'uso di LINQ a Entity Framework. Poiché la mia applicazione si collega a diversi database a seconda dell'utente corrente, ho bisogno di creare dinamicamente DataContext in fase di esecuzione e passare la stringa di connessione appropriata. Tuttavia, quando ho provato a creare una connessione Entity Framework utilizzando la mia vecchia stringa di connessione, la connessione non è riuscita. Si lamentava che non riconosceva la chiave nella stringa di connessione, "server" per essere esatto.

Ho scoperto che dovevo farlo per far funzionare la connessione di Entity Framework:

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = clientConnectionString;
entityBuilder.Metadata = "res://*/xxxxxxxxxx.csdl...";
Entities entities = new Entities(entityBuilder.ToString());

Perchè è questo?
A cosa serve la proprietà Metadata?
Sarà un problema che è sempre lo stesso per più connessioni diverse?
Cosa dovrebbe essere?
C'è un modo per aggirare questo?

Grazie in anticipo!

Aggiornamento 1: Grazie per l'aggiornamento Randolpho, ma ...
L'intera ragione per cui ho riscontrato questo problema è che non riesco a memorizzare le stringhe di connessione in un file di configurazione. La stringa di connessione viene determinata dinamicamente in fase di esecuzione da cui l'utente si sta connettendo.

Ecco il mio scenario esatto:
Se l'utente A si sta connettendo, l'app recupera i dati dal database A. Se l'utente B si sta connettendo, l'app recupera i dati dal database B.
Le stringhe di connessione sono memorizzate in un database principale e il numero è potenzialmente illimitato. Ogni volta che aggiungo un utente, non voglio entrare nel web.config, per non parlare del fatto che alla fine diventerà ENORME!

Risposta accettata

Troverete questi collegamenti molto istruttivi:

http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

http://weblogs.asp.net/pgielens/archive/2006/08/21/ADO.NET-Entity-Framework-Metadata.aspx

Linea di fondo? Entity Framework richiede i metadati per costruire i mapping delle entità.

Inoltre, dovresti considerare di spostare le informazioni di connessione nel tuo file di configurazione anziché crearlo in codice. Il primo collegamento ti mostrerà come farlo.


Risposta popolare

Espansione sulla risposta di Randolpho:

La proprietà metadata punta in modo specifico alla posizione dei file .SSDL (Modello di archiviazione,) .CSDL (Modello concettuale) e .MSL (Mapping Model). Questi tre file sono essenzialmente il Modello dati entità. Il qualificatore di stile URI "res: //" indica che i file sono incorporati come risorse nell'assemblaggio EDM compilato.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché