【问题标题】:How to check if table (entity) exists in RavenDB如何检查 RavenDB 中是否存在表(实体)
【发布时间】:2016-05-13 06:06:37
【问题描述】:

我正在使用 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())
{

}

【问题讨论】:

  • 我不确定我是否跟随。 NotSupportedException 只有在我们无法实际处理查询时才会被抛出。您是否对指定的文档感兴趣,或者对其中存在的任何内容感兴趣?
  • 我对 RavenDB 中是否存在 TimeoutData 实体(表)感兴趣。当 TimeoutData 不存在时也会抛出 NotSupportedException,但我想实现更可靠的解决方案。
  • if (!_session.Query&lt;TimeoutData&gt;().Any()) 这应该会给你这个信息
  • 原来我必须关闭实体名称的复数,然后_session.Query&lt;TimeoutData&gt;().Any() 开始工作。这篇文章帮助了我:stackoverflow.com/questions/3635954/…。 TimeoutData 也是 NServiceBus 实体,用于存储延迟消息。

标签: c# .net ravendb nservicebus


【解决方案1】:

原来我不得不关闭实体名称的复数形式,然后_session.Query&lt;TimeoutData&gt;().Any() 开始工作。在执行该查询之前,尝试查找名为 TimeoutDatas 的实体。

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

我也忘了提到TimeoutData 是用于存储延迟消息的 NServiceBus 实体。

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多