Modifier la base de données lors de l'exécution dans Entity Framework, sans modifier la connexion
J'ai un serveur qui héberge 50 bases de données avec les mêmes schémas, et je veux commencer à utiliser Entity Framework dans notre prochaine version.
Je n'ai pas besoin d'une nouvelle connexion pour chacun de ces bases de données. Les privilèges de l'une connexion peut parler à tous les 50 bases de données, et pour la gestion des données et de la vitesse (ce qui est un WebAPI application) je ne veux pas instancier un nouveau contexte EF chaque fois que je parle à chacune des bases de données si je n'ai pas, à moins bien sûr, si cela se produit chaque fois qu'une demande est envoyée au serveur puis pas une grosse affaire.
Tout ce que je vraiment besoin est la capacité de changer l'UTILISATION [nombase] commande, qui, je suppose obtient finalement envoyé au serveur à partir d'EF.
Est-il un moyen pour accomplir cette dans le code? N'EF maintenir une propriété de lecture/écriture dans le Contexte qui fait référence au nom de base de données qui pourrait être modifié à la volée avant d'appeler SaveChanges(), etc.??
Merci!!!!!!
bob
source d'informationauteur user2197022
Vous devez vous connecter pour publier un commentaire.
Vous pouvez prendre un coup d'oeil à:
EntityFramework Contexte
modifier la base de données sur la connexion existante.
S'il vous plaît laissez-moi savoir si une aide supplémentaire est nécessaire.
Édité
Mise à jour 2ème lien pour pointer vers SqlConnection.ChangeDatabase méthode.
Donc finalement, le code serait de regarder de manière similaire à la suivante:
Ne pas Travailler dur, travailler intelligemment !!!!
la structure des bases de données devrait être la même chose 😉
Il est très simple
J'avais
déjà généré automatiquement le Modèle.Contexte.cs de edmx dossier.
Pour se connecter à plusieurs bases de données dans l'exécution, j'ai créé un autre constructeur qui prend de la chaîne de connexion en paramètre, comme ci-dessous dans le même fichier de Modèle.Contexte.cs
Maintenant, j'ai ajouté d'autres de la chaîne de connexion dans le Web.Config par exemple
Puis, lors de la connexion à la base de données j'appelle ci-dessous la méthode de passage connectionString nom de paramètre
Voici ma solution pour en changeant simplement le nom de base de données. Il suffit de tirer la chaîne à partir du web ou d'une application.fichier de config, le modifier, et ensuite instancier:
J'ai mis en œuvre ce dans mon projet actuel, dans lequel nous avons une politique de sécurité de la base de données et base de données différente pour chaque client dans le projet. Donc, notre base de données de sécurité a une table qui contient la chaîne de connexion pour chaque autre base de données. Nous venons de passer l'id client et d'obtenir la chaîne de connexion de la base de données client..
Pour cela ajouter deux EDMX un pour la base de données commune et l'autre pour la commune de schéma de bases de données. Lors de la connexion de l'utilisateur ou de ce qui pourrait être votre scénario de choisir la base de données aller à la commune databse et obtenir la chaîne de connexion et de créer un objet de la base de données. Voici l'exemple de Code tout, si tout quer laissez-moi savoir..
Vous pouvez garder chaîne de connexion par rapport à chaque autre base de données dans une table dans une base de données commune partagée par tous les autres de la base de données.
EntityConnection.ChangeDatabase méthode n'est pas pris en charge, mais SqlConnection.ChangeDatabase fonctionne très bien.
Donc vous devez utiliser SqlConnection dans le cadre de l'entité de la base de données du constructeur:
Avec ce code, vous pouvez lire les tableaux avec le même format (même nom de la table et même les champs) de plusieurs schéma de passage de la base de données nom dans le "Schéma" de la chaîne.