Мы пишем модульные тесты на наше приложение ASP.NET, которые работают против тестовой базы данных SQL Server. Таким образом, метод ClassInitialize создает новую базу данных с данными тестирования, и ClassCleanup удаляет базу данных. Мы делаем это путем запущения .bat скриптов из кода.
Классам под тестом дают строку подключения, которая соединяется с базой данных модульного теста, а не производственной базой данных.
Наша проблема, что база данных содержит полнотекстовый индекс, который должен быть полностью заполнен с данными тестирования для наших тестов для выполнения как ожидалось.
Насколько я могу сказать, полнотекстовый индекс всегда заполняется в фоновом режиме. Я хотел бы смочь к также:
Мое текущее решение состоит в том, чтобы вызвать задержку в конце, класс инициализирует метод - 5 секунд, кажется, работают - потому что я ничего не могу найти в документации.
Вы можете запросить статус, используя FULLTEXTCATALOGPROPERTY (см. Здесь : http://technet.microsoft.com/en-us/library/ms190370.aspx ).
Например:
SELECT
FULLTEXTCATALOGPROPERTY(cat.name,'ItemCount') AS [ItemCount],
FULLTEXTCATALOGPROPERTY(cat.name,'MergeStatus') AS [MergeStatus],
FULLTEXTCATALOGPROPERTY(cat.name,'PopulateCompletionAge') AS [PopulateCompletionAge],
FULLTEXTCATALOGPROPERTY(cat.name,'PopulateStatus') AS [PopulateStatus],
FULLTEXTCATALOGPROPERTY(cat.name,'ImportStatus') AS [ImportStatus]
FROM sys.fulltext_catalogs AS cat
Вы также можете использовать SQL Profiler, чтобы отслеживать, какие команды SQL Server Management Studio выдает, когда вы открываете диалоговое окно свойств для каталога. Диалоговое окно включает индикацию состояния популяции, и вся отображаемая информация запрашивается с использованием T-SQL.
Спасибо, Дэниел, ваш ответ направил меня на правильный путь.
На самом деле я использую следующий оператор T-SQL, чтобы спросить, является ли статус популяции полнотекстового индекса Idle:
SELECT OBJECTPROPERTY(object_id('v_doc_desc_de'), 'TableFulltextPopulateStatus')
'v_doc_desc_de' - это имя представления базы данных, которое мы индексируем.
Если статус популяции не холост, я жду пару секунд и спрашиваю снова, пока он не станет холост. Важно выждать небольшой промежуток времени между проверками, чтобы не замедлять процесс создания полного текста из-за постоянной проверки статуса популяции.
В документации MSDN говорится, что функция OBJECTPROPERTYEX
(на уровне таблицы) рекомендуется вместо оператора FULLTEXTCATALOGPROPERTY
со свойством 'PopulateStatus'. В нем говорится следующее:
Следующие свойства будут удалены в одном из будущих выпусков SQL Server: LogSize и PopulateStatus. Избегайте использования этих свойств в новых разработках и планируйте модификацию приложений, которые в настоящее время используют любое из них.