Вы правильно помните, Маурисио. Следующий код показывает, как вы можете создать или обновить схему. Обновление будет запущено, когда Validate () вызовет исключение. Исключение не будет выдано, когда поле доступно в базе данных, но не в конфигурации. Совершенно законно иметь дополнительные поля: надеюсь, вы не хотите, чтобы они были удалены? Это может нанести огромный ущерб ...
Следующий код показывает Test, Create, Validate и Update, каждый шаг с правильной обработкой исключений. Код упрощен, но он должен дать вам представление о том, как выполнить проверку.
Этот код помогает в конфигурациях ORM, ориентированных на сущности (POCO), где вы можете добавить поле в свой класс, и оно будет автоматически обновлено в базе данных. Не с табличным центром, где поля являются ведущими.
// 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");
}
}
}
}
- Авель -