1

クラスの統合テストのために、マルチテナントravendbの一般的な削除関数を作成しようとしています-

public class RavenDeleteAll
{
    private readonly IDocumentStore _store;
    private readonly string _testDataBase;

    public RavenDeleteAll(string testDataBase, IDocumentStore store)
    {
        _testDataBase = testDataBase;
        _store = store;
    }

    public void Clear<T>(string indexName)
    {
        using (var session = _store.OpenSession(_testDataBase))
        {
            session.Advanced.DocumentStore.DatabaseCommands.DeleteIndex(indexName);

            session.Advanced.DocumentStore.DatabaseCommands.PutIndex(indexName, new IndexDefinitionBuilder<T>
                                                                                        {
                                                                                            Map = documents => documents.Select(entity => new { })
                                                                                        });
            var indexDefinition = session.Advanced.DocumentStore.DatabaseCommands.GetIndex(indexName);
            session.Advanced.LuceneQuery<T>(indexName)
           .WaitForNonStaleResultsAsOfNow()
           .Take(0)
           .ToList();

            session.Advanced.DatabaseCommands.DeleteByIndex(indexName, new IndexQuery());


        }

    }
}

コードでは、健全性チェックのために putindex を呼び出した後にインデックスを読み戻そうとしていることに注意してください。しかし、インデックスを実行すると、/indexes/UTO が存在しないことを示す無効な操作の例外がスローされますか?

また、管理コンソールから、インデックスをはっきりと見ることができます - ここに画像の説明を入力

私は何をしていないのですか?また、インデックスは実際のデータベース名ではなく、デフォルトのデータベースの下に作成されますか?

4

1 に答える 1

2

テナント データベースではなくデフォルト データベースにインデックスを作成し、テナント データベースにそのインデックスを要求しているようです。使用するデータベースにインデックスを作成する必要があります。以下はテストされていませんが、テナント データベースにインデックスを作成するために機能するはずです。

IDatabaseCommands context = session.Advanced.DocumentStore.DatabaseCommands.ForDatabase(database);
context.PutIndex(indexName, new IndexDefinitionBuilder<T>
    {
        Map = documents => documents.Select(entity => new { })
    });
于 2012-08-07T16:48:30.227 に答える