Pourquoi une connexion Entity Framework nécessite-t-elle une propriété de métadonnées?

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

Question

J'ai changé mon DAL de l'utilisation de LINQ vers Entity Framework. Étant donné que mon application se connecte à différentes bases de données en fonction de l'utilisateur actuel, je dois créer dynamiquement le DataContext au moment de l'exécution et transmettre la chaîne de connexion appropriée. Cependant, lorsque j'ai essayé de créer par programmation une connexion Entity Framework à l'aide de mon ancienne chaîne de connexion, la connexion a échoué. Il s'est plaint de ne pas reconnaître la clé dans la chaîne de connexion, "serveur" pour être exact.

J'ai découvert que je devais le faire pour que la connexion Entity Framework fonctionne:

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

Pourquoi est-ce?
A quoi sert la propriété Metadata?
Est-ce que le problème sera que ce sera toujours le même pour plusieurs connexions différentes?
Que devrait-il être?
Y a-t-il un moyen de contourner cela?

Merci d'avance!

Mise à jour 1: Merci pour la mise à jour de Randolpho, mais ...
La seule raison pour laquelle j'ai ce problème est que je ne peux pas stocker les chaînes de connexion dans un fichier de configuration. La chaîne de connexion est déterminée dynamiquement au moment de l'exécution par l'utilisateur.

Voici mon scénario exact:
Si l'utilisateur A se connecte, l'application extrait les données de la base de données A. Si l'utilisateur B se connecte, l'application extrait les données de la base de données B.
Les chaînes de connexion sont stockées dans une base de données principale et leur nombre est potentiellement illimité. Chaque fois que j'ajoute un utilisateur, je ne veux pas avoir à aller dans le web.config, sans parler du fait que cela finirait par devenir énorme!

Réponse acceptée

Vous trouverez ces liens très informatifs:

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

Ligne de fond? Entity Framework a besoin des métadonnées pour créer vos mappages d'entités.

De plus, vous devriez envisager de transférer vos informations de connexion dans votre fichier de configuration plutôt que de les générer en code. Le premier lien vous montrera comment faire cela.


Réponse populaire

Développer la réponse de Randolpho:

La propriété metadata pointe spécifiquement sur l'emplacement des fichiers .SSDL (modèle de stockage), .CSDL (modèle conceptuel) et .MSL (modèle de mappage). Ces trois fichiers sont essentiellement le modèle de données Entity. Le qualificatif de style URI "res: //" indique que les fichiers sont incorporés en tant que ressources dans l'assembly EDM compilé.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow