2016-05-13 8 views
6

Я запрашиваю встроенный объект TimeoutData в RavenDB, используя библиотеку Raven.Client.Lightweight 2.5, чтобы получить конкретный документ с таймаутом. Возможно, TimeoutData не существует в базе данных, потому что там еще не хранится документ. В этом случае NotSupportedException бросается при попытке запросить его.Как проверить, существует ли таблица (сущность) в RavenDB

В настоящее время я создал обходной путь для этой ситуации:

try 
{ 
    timeoutData = _session.Query<TimeoutData>().FirstOrDefault(t => t.Headers.ContainsValue(someValue)); 
} 
catch (NotSupportedException) 
{ 
    return null; 
} 

Можно ли проверить, если TimeoutData существовать без использования Try-улов? Я также попытался следующий код, но он возвращает ложь, если документы существуют в TimeoutData лица:

if (!_session.Query<TimeoutData>().Any()) 
{ 

} 
+0

Я не уверен, что я следую. 'NotSupportedException' будет вызываться, если мы не сможем обработать запрос. Вы заинтересованы в указанном документе или там, где что-либо существует? –

+0

Мне интересно, существует ли в RavenDB сущность (таблица) TimeoutData. NotSupportedException также генерируется, когда TimeoutData не существует, но я хотел бы реализовать более прочное решение. –

+0

'if (! _session.Query () .Any()) Это должно дать вам это сообщение –

ответ

4

Оказывается, что мне пришлось отключить плюрализацию имен сущностей и после этого _session.Query<TimeoutData>().Any() начал работать. Перед выполнением этого запроса попытался найти объект с именем TimeoutDatas.

Это сообщение помогло мне: RavenDB changes metadata "Raven-Entity-Name".

А также я забыл упомянуть, что TimeoutData является объектом NServiceBus для хранения отложенных сообщений.