2016-05-13 24 views
6

Raven.Client.Lightweight 2.5ライブラリを使用してRavenDBの組み込みTimeoutDataエンティティにクエリを実行して特定のタイムアウト文書を取得しています。ドキュメントがまだ格納されていないため、TimeoutDataがデータベースに存在しない可能性があります。その場合、クエリを実行しようとするとNotSupportedExceptionがスローされます。テーブル(エンティティ)がRavenDBに存在するかどうかを確認する方法

現在、私はこのような状況の回避策を作成しました:

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

はTimeoutDataはのtry-catchを使用せずに存在するかどうかを検証することが可能ですか? 私はまた、次のコードを試してみましたが、文書がTimeoutDataエンティティに存在する場合にはfalseを返します。

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

} 
+0

私は私が従うことを確信していません。 'NotSupportedException'は、実際にはクエリを処理できない場合にのみスローされます。 指定したドキュメントに興味がありますか、そこに存在するものは何ですか? –

+0

TimeoutDataエンティティ(テーブル)がRavenDBに存在するかどうかは私は興味があります。 NotSupportedExceptionは、TimeoutDataが存在しない場合にもスローされますが、より固いソリューションを実装したいと考えています。 –

+0

'if(!_session.Query ().Any())'これはあなたにその情報を与えるはずです –

答えて

4

私はエンティティ名の複数形をオフにしなければならなかったし、その_session.Query<TimeoutData>().Any()開始後に動作することがわかりました。このクエリを実行する前に、TimeoutDatasという名前のエンティティが見つかりました。

この投稿は役に立ちました:RavenDB changes metadata "Raven-Entity-Name"

また、TimeoutDataは遅延メッセージを格納するためのNServiceBusエンティティであることを忘れていました。

関連する問題