Je cherche des idées sur la façon dont les autres gèrent la situation suivante - J'ai quelques idées mais elles semblent un peu brouillon et je ne peux m'empêcher de penser Il me manque quelque chose.Mettre à jour le schéma de la base de données de production avec NHibernate et ajouter des données par défaut
est ici la situation:
- Vous utilisez NHibernate avec Fluent NHibernate pour les correspondances.
- Vous avez une application en production avec une base de données avec des données en direct
- Vous ajoutez une nouvelle fonctionnalité en développement et une nouvelle colonne de base de données est requise.
La nouvelle colonne ne peut pas être vide. Par exemple, j'ai récemment eu une colonne DateCreated à une table et l'application utilise maintenant cette date. Comme la seule fois où les données seront manquantes est maintenant, il semble inutile d'ajouter du code pour vérifier les erreurs.
Dans mon application, j'ai un programme de mise à jour qui peut exécuter un SchemaUpdate pour ajouter la nouvelle colonne de base de données - cependant, l'application va se bloquer car elle attend une valeur dans la nouvelle colonne.
J'ai besoin d'obtenir des données par défaut sensibles dans cette colonne. Dans ce cas, j'ai manuellement exécuté une mise à jour pour définir la date à la date actuelle (assez bon pour la situation). Dans ce cas particulier, je crois que vous ne pouvez pas définir la valeur par défaut de la colonne getdate() en utilisant des mappages fluides.
Mon idée
- Gardez un numéro de version de schéma dans un fichier de configuration
- Dans Updater qui va SchemaUpdate commencer à ajouter des méthodes de mise à niveau pour chaque version. Ces méthodes exécuteraient des mises à jour pour ajouter des données par défaut (ou d'autres actions requises).
- Une fois la mise à jour du schéma exécutée, appelez toutes les méthodes requises pour une version supérieure à la version actuelle (c'est-à-dire celles qui n'ont pas été précédemment exécutées). Donc, si l'application est maintenant la version 4 et la version 2 est installée, les méthodes 3 et 4 seraient exécutées.
- Mettre à jour le numéro de version enregistrée
Comment sont les autres personnes qui manipulent cette situation?
J'utilise SchemaUpdate pour mettre à jour le schéma - il ne gère pas l'ajout de données par défaut après que le schéma a été modifié. –
J'ai mis à jour ma réponse avec ce que je fais moi-même (très proche de votre idée) –
SchemaUpdate n'est PAS destiné à être utilisé dans des bases de données de production. –