Vous vous souvenez correctement, Mauricio. Le code suivant montre comment vous pouvez créer ou mettre à jour un schéma. La mise à jour s'exécutera lorsque Validate() déclenchera une exception. Aucune exception ne sera levée lorsqu'un champ est disponible dans la base de données mais pas dans la configuration. Il est parfaitement légal d'avoir des champs supplémentaires: vous ne voulez pas qu'ils soient supprimés, j'espère? Cela pourrait causer d'énormes dommages ...
Le code suivant montre Test, Créer, Valider et Mettre à jour, chaque étape avec la gestion des exceptions appropriée. Le code est simplifié, mais il devrait vous donner un contrôle sur la façon de faire une validation.
Ce code aide avec les configurations ORM Entity-centric (POCO), où vous pouvez ajouter un champ à votre classe et il sera automatiquement mis à jour dans la base de données. Pas avec table-centrique, où les champs mènent.
// executes schema script against database
private static void CreateOrUpdateSchema(Configuration config)
{
// replace this with your test for existence of schema
// (i.e., with SQLite, you can just test for the DB file)
if (!File.Exists(DB_FILE_NAME))
{
try
{
SchemaExport export = new SchemaExport(config);
export.Create(false, true);
}
catch (HibernateException e)
{
// create was not successful
// you problably want to break out your application here
MessageBox.Show(
String.Format("Problem while creating database: {0}", e),
"Problem");
}
}
else
{
// already something: validate
SchemaValidator validator = new SchemaValidator(config);
try
{
validator.Validate();
}
catch (HibernateException)
{
// not valid, try to update
try
{
SchemaUpdate update = new SchemaUpdate(config);
update.Execute(false, true);
}
catch (HibernateException e)
{
// update was not successful
// you problably want to break out your application here
MessageBox.Show(
String.Format("Problem while updating database: {0}", e),
"Problem");
}
}
}
}
- Abel -