Я доволен этим тестом, предложенным Ayende:
[Test]
public void PerformSanityCheck()
{
foreach (var s in NHHelper.Instance.GetConfig().ClassMappings)
{
Console.WriteLine(" *************** " + s.MappedClass.Name);
NHHelper.Instance.CurrentSession.CreateQuery(string.Format("from {0} e", s.MappedClass.Name))
.SetFirstResult(0).SetMaxResults(50).List();
}
}
Я использую простой старый запрос, так как эта версия происходит из очень старого проекта, и я ленивобновить с помощью QueryOver или Linq2NH или чего-то еще ... Он в основном пропингует все настроенные сопоставленные сущности и также захватывает некоторые данные, чтобы убедиться, что все в порядке.Неважно, существует ли какое-либо поле в таблице, но не в отображении, это может вызвать проблему в постоянстве, если не обнуляется.Я знаю, что у Фабио Мауло есть что-то более точное .В качестве личного соображения, если вы думаете об улучшении, я бы попытался реализовать такую стратегию: поскольку отображение доступно для просмотра через API, найдите любое явное / неявное объявление таблицы на карте и отправьте эхо-запрос с базой данных, используя стандартную схему.вспомогательные классы у вас внутри NH (они в конечном итоге используют классы схемы ADO.NET, но они изолируют все вещи конфигурации, которые мы уже сделали в самом NH). Немного поиграв со стратегией именования, мы можем получить один за другим контрольный список полей таблицы.Еще одно улучшение может быть достигнуто путем, в случае несоответствия области, поиска кандидата путем применения расстояния Левенштейна ко всем доступным именам и выбора одного, если удовлетворены некоторые пороговые реквизиты.Это, конечно, бесполезно в сценариях первого класса, когда схема БД генерируется самим NH.