9

RavenDB (@localhost:3000 を実行するサーバー モード) と ASP.NET MVC3 を使用しています。

ビルド 289 から動作を停止したこのコード セグメントがあります。それが 322 への更新なのか、それとも私が行ったものなのかはわかりませんが、以前は数回動作していました。

Session.Query<Post>().ToList().ForEach(Session.Delete);

しばらく前に試したときにすべての投稿を削除していました (サンプル データには約 50 件の奇妙な投稿しかなく、さらに 500 件の投稿しかありません)。私が見ることができる唯一の変更は、実行時にこれら 2 つが発生していることです。

A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'System.Net.WebException' occurred in Raven.Client.Lightweight.dll

そして、このログは、上記のコード セグメント (Session.Delete) が実際に実行されているときに、ビジュアル スタジオの出力ウィンドウに表示されます。

Executing query '' on index 'dynamic/Posts' in 'http://localhost:3000'
Query returned 0/0 results

また、Raven のログ (テキスト ファイル) には、不都合なことは何もありません。

Request #   7: GET     -    46 ms - ZaszStore  - 200 - /indexes/dynamic/Posts?query=&start=0&pageSize=128&aggregation=None

このクエリは問題なく実行されます:

Session.Load<Post>("MyPostId")

正しい Post インスタンスをフェッチします。

単純な Session.Query().ToList() が常に 0 の結果を返すのはなぜですか? また、Session.Query().Count() は常に 0 を返します。Raven DB の SilverLight-UI (SL-UI) が DB に 50 個の奇数の投稿があることを明確に示していることを考えると、この動作の原因は何ですか?

「Raven-Entity-Name」は正しく入力されています。

4

1 に答える 1

1

この種のクエリでは、次のようにすべてのドキュメントを取得できます。

documentStore.DatabaseCommands.StartsWith("post", <page>, <size>) 

これは、Lucene インデックスをバイパスしてデータストアからドキュメントを直接取得するため、クエリを発行してすべてのドキュメントを返すよりも簡単で効率的です。

ただし、ID として保存プレフィックスを持つすべてのドキュメントを取得する場合にのみ機能します。

于 2011-08-02T19:51:19.140 に答える