2010-12-12 25 views
1

Je cherche à utiliser Fluent NHibernate dans une application de bureau qui utilise 3 fichiers de base de données différents. (Eh bien, 3 types différents.)Comment effectuer plusieurs modifications de base de données à la fois en utilisant NHibernate?

  • DB1 est le fichier principal de base de données contenant des tables A, B, C et D.
  • DB2 est un fichier de base de données contenant des données détaillées (échantillons X par seconde, session de programme sera recevoir un nouveau fichier car ils peuvent grandir très) dans le tableau E.
  • DB3 est un fichier de base de données utilisé pour exporter et importer des données entre les utilisateurs (contient 1 ligne de A, 1 de B et tout E qui appartient à la donnée ligne de A et B)

La création de ce n'est pas vraiment un problème car la fonction SchemaExport.Create fait cela parfaitement.

Le problème auquel je suis confronté est que je ne sais pas exactement quelle est la meilleure façon de modifier mes tables. Plus précisément, faire plusieurs mises à jour de version à la fois. Mon application est actuellement la version 1, expédition avec la version 1 de base de données, la semaine prochaine je bosse tout à la version 2 - Je peux mettre à jour la base de données avec SchemaUpdate.Execute - et le mois prochain je bosse tout à la version 3 et je peux refaire la même chose . Mais je veux que mes utilisateurs puissent mettre à jour de la version 1 à la version 3 à la fois.

Si je voudrais faire des choses manuellement je créerais une table appelée version dans chaque fichier de base de données qui contient une version. Je vérifierais alors ce champ contre la version actuelle et effectuer des requêtes de table ALTER. Par exemple:

if (db_version < LATEST_VERSION) { 
    switch (db_version + 1) { 
    case 2: Execute("ALTER TABLE A..."); Execute("UPDATE A..."); break; 
    case 3: Execute("ALTER TABLE B..."); break; 
    } 
} 

En utilisant cette approche (lors de l'utilisation du fournisseur de base de données SQLite directement) Je ne dois prévoir 1 version de mon modèle de données, 1 service de mise à jour qui gère tout, mais je besoin de créer ma base de données et mes fichiers de modèles de données manuellement, et je devrais mettre à jour au moins deux fichiers .db et deux services de mise à jour (un pour chaque type de base de données). Ce qui peut être vu comme un travail en double. En utilisant NHibernate, j'élimine le processus de maintenance d'un fichier de base de données et d'un modèle de données, mais la seule façon de voir les mises à jour de 1 à 3 est la suivante:

est de garder une ancienne version de chaque modèle de données et faire quelque chose comme:

namespace Version1 { 
    public class A {} 
    DoUpdate(); 
} 

namespace Version2 { 
    public class A {} 
    DoUpdate(); 
} 

Suis-je à la recherche tout à fait à ce dans le mauvais sens ou est mon cas simplement complexe et serais-je mieux d'utiliser l'approche manuelle? Quelle serait la meilleure solution pour mettre à jour et migrer de la version 1 vers la version 3 en utilisant Fluent NHibernate? Ou est-ce que quelqu'un pourrait recommander l'approche manuelle, et si oui, pourquoi?

+0

Vous avez raison, généralement en utilisant une approche de «migrations» pour la création de bases de données, vous devrez vous en tenir à chaque étape. – Chris

Répondre

2

Je ne peux pas répondre à la question avec Fluent NHibernate, parce que je n'ai jamais trouvé un bon moyen. À mon avis, il n'est pas configuré pour gérer de vraies migrations de bases de données. Donc, pour tous mes projets Fluent NHibernate, j'utilise http://code.google.com/p/migratordotnet/ Ce n'est pas parfait, mais ça fait l'affaire.

+0

MigratorDotNET est plutôt bon, mais il semblerait que le créateur ait cessé de contribuer: http://groups.google.com/group/migratordotnet-devel/browse_thread/thread/60c990081bda8c39. Il y a quelques alternatives énumérées dans ce fil. –

+0

Entièrement d'accord. J'ai rassemblé une liste des outils de migration les plus courants dans l'espace .NET pour cette question ... http: // stackoverflow.com/questions/4038601/nhibernate-orm-comment-est-refactoring-traitées-existantes-données/4038866 # 4038866 –

+0

Le créateur a contribué à certains de ces derniers mois. Dans l'ensemble, cependant, c'est déjà très bien et c'est simple. Pas besoin d'installer Ruby pour construire/migrer ou quelque chose comme ça. –