Modifier le schéma de la base de données d'infrastructure Entity au moment de l'exécution

asp.net c# entity-framework

Question

Dans la plupart des applications asp.net, vous pouvez modifier le magasin de bases de données en modifiant la chaîne de connexion au moment de l'exécution. c'est-à-dire que je peux changer d'utilisation d'une base de données de test en base de données de production en modifiant simplement la valeur du champ "base de données" dans la chaîne de connexion

J'essaie de changer le schéma (mais pas nécessairement la base de données elle-même) avec un cadre d'entité mais pas de chance.

Le problème que je vois est que le contenu SSDL du fichier XML edmx stocke le schéma pour chaque entité.

voir ci-dessous

<EntitySet 
    Name="task" 
    EntityType="hardModel.Store.task" 
    store:Type="Tables" 
    Schema="test"  />

Maintenant, j'ai changé la valeur de l'attribut de schéma en "prod" de test et cela fonctionne ..

Mais cela ne semble pas être une bonne solution.

  1. J'ai besoin de mettre à jour le jeu d'entités evert ainsi que les procédures stockées (j'ai +50 tables)
  2. Je peux seulement faire ça un temps de compilation?
  3. Si j'essaie ensuite de mettre à jour plus tard, les entités de modèle d'entité qui existent déjà sont en cours de lecture car EF ne reconnaît pas que la table existe déjà dans l'EDM.

Des pensées?

Réponse acceptée

Mise à jour À la lecture de vos commentaires, il est clair que vous souhaitez modifier le schéma référencé pour chaque base de données, pas la base de données. J'ai modifié la question pour clarifier ceci et pour restaurer l'exemple EDMX que vous avez fourni, qui était masqué dans le formatage d'origine.

Je vais répéter mon commentaire ci-dessous ici:

Si les schémas se trouvent dans la même base de données, vous ne pouvez pas les modifier au moment de l'exécution (sauf avec EF 4 uniquement). En effet, deux tables identiques et structurées dans deux schémas différents sont considérées comme des tables totalement différentes.

Je suis également d'accord avec JMarsch ci-dessus: je reconsidérerais la conception de la mise en données de test et de production (ou, en réalité, de " tout et de données de production") dans le même DB. Cela ressemble à une invitation au désastre.

Ancienne réponse ci-dessous.

Êtes-vous sûr de changer la chaîne de connexion correcte? La chaîne de connexion utilisée par l'EF est incorporée dans la chaîne de connexion qui spécifie l'emplacement de CSDL / SSDL / etc. Il est courant d'avoir une chaîne de connexion "normale" à utiliser par une autre partie de votre application (par exemple, un abonnement ASP.NET). Dans ce cas, lorsque vous modifiez des bases de données, vous devez mettre à jour vos deux chaînes de connexion.

De même, si vous mettez à jour la chaîne de connexion au moment de l'exécution, vous devez utiliser des outils spécifiques , qui comprennent le format de la chaîne de connexion EF et sont distincts du générateur de chaîne de connexion habituel. Voir l'exemple dans le lien. Voir également cette aide sur l’affectation de chaînes de connexion EF .


Réponse populaire

J'ai le même problème et c'est vraiment plutôt agaçant, car c'est l'un de ces cas où Microsoft a vraiment manqué le coche. La moitié des raisons d'utiliser EF est la prise en charge de bases de données supplémentaires, mais à moins que vous n'utilisiez d'abord le code qui ne résout pas vraiment le problème.

En MS SQL, changer le schéma n'a pas beaucoup de sens, car le schéma fait partie de l'identité des tables. Pour d'autres types de bases de données, le schéma ne fait en grande partie pas partie de l'identité de la base de données et détermine uniquement l'emplacement de la base de données. La connexion à Oracle et la modification de la base de données et du schéma sont essentiellement synonymes.



Related

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