Changement DbContext de connexion au moment de l'exécution
J'ai 3 DBs que je veux travailler avec: A,B et C.
chacun a les mêmes tables (par exemple: les utilisateurs, les produits).
Je veux laisser l'utilisateur décider (au moment de l'exécution) DB qui il veut travailler.
Alors... j'ai utilisé EF5 et créé 3 edbx fichiers qui ont créé les classes suivantes: ADBEntities, BDBEntities et CDBEntities.
Comment puis-je le laisser décider le selecteddb afin que je puisse obtenir ses utilisateurs?
Je veux dire,
var dstuff = from user in selecteddb.users
where user.UserEmail == userEmail
select user.UserID;
J'ai pensé à l'aide de la réflexion /classe de base (DBEntities), mais n'a pas été bien loin avec ces idées.
j'ai ajouté une option alternative pour votre sceanrio. espérons que cela aide...
OriginalL'auteur user3017270 | 2013-11-26
Vous devez vous connecter pour publier un commentaire.
un peu en retard sur cette réponse, mais je pense qu'il y a un moyen de le faire avec un peu soigné de la méthode d'extension. Comme slypete (joli nom :-)) dit, vous avez seulement besoin d'UN modèle de classe, en supposant que toutes les tables/propriétés sont identiques. Ceci étant le cas, nous pouvons profiter de l'EF convention over configuration plus un peu de peu le cadre des appels.
De toute façon, sans plus tarder, le code commenté et exemple d'utilisation:
la méthode d'extension de la classe:
utilisation:
J'utilise actuellement ce pour exactement le but que vous mentionnez ci-dessus et, à ce jour, il est servi moi, très bien. Espérons que cela aide dans votre instance.
OriginalL'auteur jim tollan
Passer la connexion en chaîne /nom de connexion lors de la création d'un
DbContext
http://msdn.microsoft.com/en-us/library/gg679467%28v=vs.113%29.aspx
OriginalL'auteur Matthew
En supposant que les bases de données sont identiques, vous avez juste besoin d'utiliser l'une des classes générées. Vous n'avez pas besoin tous les trois (parce qu'ils sont identiques). Donc, nous allons choisir l'une-disons
ADBEntities
.Maintenant, vous avez besoin pour lui permettre de choisir sa connexion (chaîne de connexion) au moment de l'exécution. Si vous avez vos trois chaînes de connexion stockées dans votre application.config/web.la configuration, vous pouvez charger jusqu'au moment de l'exécution à l'aide de la
ConfigurationManager
:Présentent les choix et sélectionnez-en un en quelque sorte:
L'un des
DBContext
's constructeurs prend une chaîne de connexion, il suffit donc de passer à l'utilisateur sélectionné chaîne de connexion pour le constructeur deADBEntities
:Si j'ajoute le constructeur suivant: public AdbEntities(string nameOrConnectionString) : base("nom=AdbEntities") { } je reçois cette erreur: Schéma spécifié n'est pas valide. Erreurs: La relation " AdbModel.AccessCategoriesGroup "n'a pas été chargé, car le type" AdbModel.ProductCategory " n'est pas disponible.
OriginalL'auteur slypete