web-dev-qa-db-fra.com

Code de structure d'entité d'abord - comment exécuter Update-Database pour la base de données de production

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

La base de données 'Update-Database' fonctionne correctement à partir de mon ordinateur local, mais comment puis-je l'obtenir pour les données de production?

Ainsi, si je modifie mon application et que je lance ensuite la publication dans Visual Studio, cela fonctionne bien pour le code, mais comment puis-je exécuter la commande "Update-Database" pour les données de production.

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

Merci,

67
ironman

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

Personnellement, je ne fais pas confiance automatic updates dans des scénarios "en direct", et je préfère toujours l’administration manuelle de base de données (c’est-à-dire qu’il existe un problème avec permissions nécessaire pour créer ou modifier Db - sans parler de l’hébergement partagé, etc.) - mais de ce que j’ai déjà vu. Les migrations observées sont assez solides en ce qui concerne la synchronisation (en fait, le seul moyen de les "délier" normalement consiste à supprimer le Db et à forcer une mise à jour complète/récente).

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

MVC3 et Code First Migrations - "le modèle sauvegardant le contexte 'blah' a changé depuis la création de la base de données"

24
NSGaga

Reportez-vous à la section Migrations en production avec Entity Framework (code en premier) pour que votre application mette automatiquement à jour la base de données lors de l'initialisation de Entity Framework.

Maintenant, si vous êtes plus à l'aise avec le contrôle manuel de la migration, vous pouvez utiliser l'argument -Script de la commande Update-Database sur votre ordinateur de développeur pour générer des scripts SQL 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 Obtention d'un script SQL)

31
David Moore

Voulez-vous simplement automatiquement mettre à jour la base de données vers la dernière version quand et où votre application est exécutée (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 que la migration manuelle de la ou des bases de données n'est pas réalisable. Veuillez voir 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 ressemble fondamentalement au code suivant:

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

Si vous n'avez pas de chance avec web.config, alors vous pouvez aussi essayer de mettre ce code dans Global.asax. Personnellement, je préfère la configuration au code.

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

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

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

(Source et plus de détails: http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html )

4
Florian Winter