web-dev-qa-db-fra.com

Première migration de code avec des chaînes de connexion

J'ai donc réussi à faire fonctionner Code First et cela fonctionne très bien.

Étant donné que je développe encore l'application, la structure de la base de données n'est pas finalisée et j'ai donc besoin de mettre en œuvre des migrations.

J'ai suivi le Official Blog Post et obtenu que la commande Update-Database fonctionne.

Toutefois, cela met uniquement à jour la version SQLExpress de la base de données. La version de production de la base de données est sur Azure et je spécifie la chaîne de connexion au moment de l'exécution afin que la commande Update-Database ne fonctionne pas sur cela.

Ma dernière question est donc la suivante: comment appliquer des migrations automatiques à la base de données de production dont la chaîne de connexion est spécifiée lors de l'exécution?

37
Dragonseer

Sur la console du gestionnaire de packages, tapez:

Get-Help Update-Database

Partie pertinente:

    Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com
monParameters>]

Vous pouvez donc faire un Update-Database -ConnectionStringName "MyConnectionString" Et cela devrait fonctionner comme un charme.

Vous disposez également d'un initialiseur de base de données MigrateDatabaseToLatestVersion, si vous le définissez (via Database.SetInitializer()), lorsque vous déployez votre application en production avec une chaîne de connexion appropriée, lors du premier accès à la base de données, elle devrait migrer automatiquement votre base de données à la dernière version.

Je suggère cependant la prudence, toujours sauvegarder les choses.

Mise à jour

Les récents commentaires de @Alexy Strakh ont engendré un autre argument qui mérite d'être mis dans la réponse.

Configuration correcte d'un système de déploiement à l'aide de Migrations en premier code, compte tenu de 2 chaînes de connexion.

  1. Définissez vos chaînes de connexion dans web.config (prod et dev), avec des mots de passe par défaut
  2. Faites connaître au système de configuration de votre application les configurations de connexion prod et dev, créez éventuellement des tests unitaires pour vous assurer que la bonne est choisie *
  3. Employez transformation du fichier de configuration et faites-le transformer votre web.config en celui avec des valeurs de production
  4. Déployez votre package en production ( cela devrait être le moyen le plus avant-gardiste )

Vous n'êtes pas censé interagir avec l'environnement de production à partir de votre boîte de développement, mais si vous avez vraiment besoin de le faire, alors faites-en une solution temporaire qui a besoin à revenir dès que vous avez terminé.

Une autre option consiste à simplement utiliser Web.Debug.config et Web.Release.config et à avoir un modèle central pour le web.config principal (qui serait le seul que vous archivez dans votre contrôle de code source).

Assurez-vous simplement de ne jamais archiver les mots de passe de production ou de développement personnel (le cas échéant).

* Vous pouvez utiliser le symbole DEBUG pour vérifier le fonctionnement de l'application.

51
WDRust

Pourquoi l'étape d'ajout de migration EF Migrations d'Entity Framework nécessite une chaîne de connexion à la base de données?

A une solution que je considère comme moins exigeante en main-d'œuvre à long terme. Comme si vous créez une chaîne de connexion avec le même nom

Sur votre contexte: base ("DBName")

Le nom de la chaîne de connexion et le catalogue initial correspondent au DBName que vous avez spécifié et vous n'avez pas besoin d'entrer le nom de la chaîne de connexion à chaque fois.

6
P6345uk