如何检查RavenDB中是否存在表(实体)

时间:2016-05-13 06:06:37

标签: c# .net ravendb nservicebus

我使用Raven.Client.Lightweight 2.5库查询RavenDB中的内置TimeoutData实体以获取特定的超时文档。数据库中可能不存在TimeoutData,因为还没有文档存储在那里。在这种情况下,当您尝试查询时会抛出NotSupportedException。

目前我已针对这种情况创建了解决方法:

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

是否可以在不使用try-catch的情况下验证TimeoutData是否存在? 我还尝试了以下代码,但是当TimeoutData实体中存在文档时它返回false:

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

}

1 个答案:

答案 0 :(得分:4)

原来我必须关闭实体名称的多元化,之后_session.Query<TimeoutData>().Any()开始工作。在执行该查询之前,尝试查找名为TimeoutDatas的实体。

这篇文章帮助了我:RavenDB changes metadata "Raven-Entity-Name"

而且我忘了提到TimeoutData是用于存储延期消息的NServiceBus实体。