90 votes

Entity framework code first - comment exécuter Update-Database pour une base de données de production ?

Je voudrais savoir comment exécuter la commande 'Update-Database' pour une base de données de production.

La base de données "Update-Database" fonctionne bien à partir de ma machine locale, mais comment faire pour que cela fonctionne pour les données de production ?

Ainsi, si j'apporte une modification à mon application et que je lance la publication via Visual Studio, cela fonctionne bien pour le code, mais comment lancer la commande "Update-Database" pour les données de production.

J'espère que cette question a du sens...

Merci,

36voto

David Moore Points 481

Véase Utiliser les migrations Entity Framework (code first) en production afin que votre application mette automatiquement à jour la base de données lors de l'initialisation de l'Entity Framework.

Si vous préférez contrôler manuellement la migration, vous pouvez utiliser l'argument -script de la commande Update-Database sur votre machine de développement pour générer des script que vous pouvez ensuite exécuter sur la base de données de production.

http://msdn.microsoft.com/en-us/data/jj591621.aspx (voir la section Obtenir un script)

27voto

NSGaga Points 7386

Pour ajouter à ce que @David a déjà dit...

Personnellement, je ne fais pas confiance automatic updates dans des scénarios "réels", et je préfère toujours une administration manuelle de la base de données (c.-à-d. qu'il y a un problème avec permissions ) - mais d'après ce que j'ai vu, les migrations sont assez solides en ce qui concerne la synchronisation (en fait, la seule façon de les "délier" normalement est de supprimer la base de données et de forcer une mise à jour complète/fraîche).

Voici un article que j'ai publié il y a quelque temps sur la façon de script y synchronize database / code et orienté vers des scénarios de déploiement (et lorsque des problèmes surviennent). Cela ne s'applique pas (encore) à vous, mais c'est une chose à garder à l'esprit.

MVC3 et Code First Migrations - "model backing the 'blah' context has changed since the database was created" (le modèle soutenant le contexte 'blah' a changé depuis la création de la base de données)

7voto

Florian Winter Points 61

Voulez-vous simplement automatiquement mettre à jour la base de données avec la dernière version au moment et à l'endroit où votre application fonctionne (développement et production) ?

Ce n'est peut-être pas une bonne idée, sauf dans des scénarios très simples où vous savez que vous pouvez faire confiance à la migration automatique et où la migration manuelle de la ou des bases de données n'est pas réalisable. Veuillez consulter cette réponse : https://stackoverflow.com/a/15718190/2279059 . Si vous ne tenez pas compte de cet avertissement, lisez la suite.

Ajouter ce qui suit à web.config :

<entityFramework>
<contexts>
  <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" />
  </context>
</contexts>

Cela peut sembler effrayant, mais cela revient à faire la même chose que le code suivant :

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());

Si vous n'avez pas de chance avec web.config Dans ce cas, vous pouvez également essayer de placer ce code dans le fichier Global.asax . Personnellement, je préfère la configuration au code.

Si vous souhaitez que votre fichier de configuration soit plus propre, vous pouvez également dériver une nouvelle classe à partir du modèle MigrateDatabaseToLatestVersion afin que vous n'ayez pas à utiliser la syntaxe cryptique pour passer des arguments de type dans votre classe web.cofig fichier :

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}

Cela permet de définir un initialisateur de base de données qui met automatiquement à jour la base de données avec la dernière version.

(Source et détails supplémentaires : Entity Framework Code First Initialisation de Web.config )

6voto

M. Ruiz Points 118

Vous pouvez exécuter le Mise à jour de la base de données EF Tools en utilisant la chaîne de connexion Production comme suit :

Update-Database -Args '--environment Production'

Fuente: https://docs.microsoft.com/en-us/ef/core/cli/powershell#aspnet-core-environment

Comme d'autres l'ont dit, il faut être très prudent. Mise en scène l'environnement.

0voto

Gimmly Points 66

Une autre solution qui a fonctionné pour moi est la suivante : Dans mon fichier web.config local, j'ai défini la chaîne de connexion pour qu'elle pointe vers le serveur de production.

Ensuite, toutes les commandes de la PM Console seront exécutées sur le serveur de production. Je peux update-database ou inverser les migrations si nécessaire, et les modifications s'appliqueront à la base de données de production.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X