Question

Alors, débutant utilisateur NHibernate; essayant d'envelopper mon cerveau autour.

Je contemple comment gérer le déploiement et l'injection ultérieure d'add-ons pour une application web (ce qui peut nécessiter leurs propres classes de persistance).

Je pensais que l'utilisation SchemaExport pour le déploiement serait très bien, mais je me demandais s'il y a une trop se NHibernate pour me dire d'une manière commune, basée sur le code que l'exportation de schéma a déjà été fait, ou non . Au fond, je veux faire smething comme dans ce pseudo-code:

  if(!_cfg.HasSchemaForType(typeof(MyType))
       ExportSchema(typeof(MyType));
  else
       UpdateSchema(typeof(MyType));

où les deux fonctions utilisent interne SchemaExport ou SchemaUpdate, respectivement.


EDIT: Les gars, je vous remercie de la réponse à ce jour, mais ils ratent le point un peu. Ce que je suis en train de mettre en place est un moyen pour l'application afin de permettre l'ajout et la suppression des add-ons qui peut nécessiter des modifications à la db. Je ne parle pas de versioning mon propre code ou similaire (au moins, pas sa fonction première). Donc, la question est moins quand je Déployez le soft, et plus quand ajouter ou supprimer un plug-in. Est-ce que plugin Theis (d'où le contrôle de type pseudo-code) été déployée avant? Si, exécutez la mise à jour. Dans le cas contraire, exécutez l'exportation. Sens?

Était-ce utile?

La solution

Non, NHibernate ne fait pas ce que vous demandez. J'imagine qu'il serait possible d'écrire un code qui a exporté le schéma et puis par rapport au schéma de base de données. Mais il serait probablement plus facile d'exporter dans une base de données temporaire et utiliser un outil 3ème partie, comme Redgate SQL Comparer pour comparer les schémas.

Même si elle a fait ce que vous demandez, je ne vois pas comment cela pourrait aider au déploiement parce que son but est de créer une base de données à partir de zéro.

Sous la direction d'ajouter: En supposant que chaque plug-in a son propre ensemble de tables, vous pouvez déterminer si le schéma a été déployé à l'aide d'une des méthodes suivantes:

  • Tentative de charger l'un des objets de plug-in et la capture.
  • Examiner pour vérifier si la table (s) sont le schéma de base de données (en utilisant SMO pour SQL Server).
  • Créer un enregistrement dans une table lorsqu'un plug-in est déployé.

Autres conseils

Je pense que ce que vous recherchez est SchemaUpdate.Execute au lieu d'utiliser SchemaExport. SchemaUpdate va créer le schéma si elle n'existe pas déjà, ou le mettre à jour si nécessaire et souhaité.

Cela fonctionne pour moi utilisant à la fois MSSQL et SQLite.

new SchemaUpdate(config).Execute(false, true);

Oui, il y a, dans la version 3.0 au moins

public static bool ValidateSchema()
{
    NHibernate.Tool.hbm2ddl.SchemaValidator myvalidator = new NHibernate.Tool.hbm2ddl.SchemaValidator(m_cfg);
    try
    {
        myvalidator.Validate();
        myvalidator = null;
        return true;
    }
    catch (Exception ex)
    {
        MsgBox(ex.Message, "Schema validation error");
    }
    finally
    {
        myvalidator = null;
    }

    return false;
}

Pour la partie de mise à jour, faire.

public static void UpdateSchema()
{
    NHibernate.Tool.hbm2ddl.SchemaUpdate schema = new NHibernate.Tool.hbm2ddl.SchemaUpdate(m_cfg);
    schema.Execute(false, true);
    schema = null;
} // UpdateSchema

Le but de l'exportation de schéma est de générer le schéma complet à partir de zéro. Vraiment utile si vous ne l'avez pas encore déployé votre application.

Après le premier déploiement Je recommande fortement d'utiliser un outil de migration qui vous aidera à d'autres extensions / modifications du schéma. Si vous pensez un peu plus avant, vous remarquerez que vous avez besoin même la manipulation de données (par exemple la suppression des données incorrectes qui a été généré en raison d'un bug) que votre application évolue. C'est tout un outil de migration peut vous aider.

Jetez un coup d'oeil dans:

Voici une liste de plus d'outils de migration pour .net répondu à une question SO:

L'idée originale des migrations provient de Ruby on Rails et a été « cloné » dans d'autres cadres sur le passé. Voilà pourquoi il est certainement bon de lire sur l'idée originale http://guides.rubyonrails.org/migrations. html aussi.

Si vous avez VS Team Suite ou l'édition Developer Base de données, il peut synchroniser et suivre les changements et faire un script de déploiement qui permettra de créer tous les objets pour vous. Aussi Redgate a un schéma produit Comparer qui fait la même chose si je ne me trompe pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top