زمانيكه خاصيتي به يكي از كلاسهاي نگاشتهاي تعريف شده اضافه ميشود يا حذف ميگردد، دقيقا بايد اين به روز رساني در سمت بانك اطلاعاتي هم انجام شود. امكان تهيه و همچنين اعمال اسكريپت نهايي توليد database schema مهيا است، اما ممكن است به هر علتي اين كار فراموش شود. اكنون سؤال اين است كه آيا ميتوان سريع بررسي كرد كه ديتابيس مورد استفاده با نگاشتهاي برنامه همخواني و تطابق دارد؟
جهت پاسخ به اين سؤال بهترين راه ايجاد يك كوئري Select بر اساس تمام خواص تعريف شده در يك كلاس است. اگر يكي از خواص يا حتي خود جدول وجود نداشته باشد، انجام اين كوئري خودبخود با شكست مواجه شده و يك استثناء صادر خواهد شد. همين ايده را به سادگي ميتوان با NHibernate هم پياده سازي كرد:
public class ConfirmDatabaseMatchesMappings
{
public static void ValidateDatabaseSchemaAgainstMappings()
{
//در اينجا بايد سشن فكتوري سراسري تعريف شده را دريافت و استفاده كرد
using (var session = sessionManager.OpenSession())
{
var allClassMetadata = session.SessionFactory.GetAllClassMetadata();
foreach (var entry in allClassMetadata)
{
session.CreateCriteria(entry.Value.GetMappedClass(EntityMode.Poco))
.SetMaxResults(0).List();
}
}
}
}
NHibernate.Exceptions.GenericADOException was unhandled
Message=could not execute query
...