2012-12-12 10 views
8

インデックスが存在するかどうかを確認するにはどうすればよいですか? - 呼び出す前に:(サンプルプロジェクトでのものも含めて)私が見てきたRavenDbインデックスが存在するかどうかをチェック

IndexCreation.CreateIndexes(typeof(MyIndexClass).Assembly, documentStore); 

すべての例を右思えないクライアントが開始されたインデックスの再作成されたすべての時間を過ごしました。

また、一般的な戦略は何ですか?通常のCRUD操作があるようですが、上記のような索引付けなどの管理コマンドがあります。人々は、メインのアプリとは別に管理者を実行し、それを展開/実行するコンソールアプリケーションを作成するだけですか?

+0

これはあなたの質問に答えることはできませんが、RavenDBが自動的にインデックスを作成することに言及する価値があると感じました。 [このRavenDBのドキュメントページ](http://ravendb.net/docs/client-api/querying)、特に動的インデックスに関する部分を参照してください。 – ean5533

+0

@ ean5533 - 動的インデックスに適用されます(yes)。私はOPが静止インデックスの作成に関心があると思う。説明のために –

答えて

18

存在を確認する必要はありません。サーバーは、送信した索引定義を自動的に比較し、すでに存在するかどうかを確認します。同じ名前と定義を持つものが存在する場合は、そのまま残されます。同じ名前のオブジェクトが存在し、定義が変更されている場合は、古いオブジェクトが削除され、新しいオブジェクトが作成されます。

通常、アプリケーションの起動時に同じアプリケーションでインデックスを作成します。 global.asaxにある可能性のあるWebアプリケーションや、コンソール/デスクトップアプリケーションでは、起動コードの最初の部分にすぎません。

しかし、マルチテナントアプリケーションのように、多くのデータベースがある場合など、それは不可能なことがあります。そのような場合は、各テナントデータベースを作成するときにインデックスを作成し、バージョンアップグレードを展開するときにインデックスを更新または作成する必要があります。

また、インデックスを作成するにはいくつかの方法があります。

// scans the assembly for all indexes and creates them 
IndexCreation.CreateIndexes(assembly, documentStore); 

// scans a MEF catalog for all indexes and creates them 
IndexCreation.CreateIndexes(catalog, documentStore); 

// puts a single index the HARD way 
documentStore.DatabaseCommands.PutIndex(...); 

// puts a single index the easy way 
documentStore.ExecuteIndex(new YourIndexCreationTask()); 

他にもいくつかありますが、あなたはそのアイデアを得ています。

そして、あなたは本当にはあなたが使用することができ、インデックスexistanceをチェックしたいなかった場合だけ、徹底すべき:

documentStore.DatabaseCommands.GetIndex("YourIndex") != null 

しかし、それは唯一の名前ではなく、定義によってチェックされます。そしてあなたはそれを必要としません。

+0

ありがとう。私はこれを読んだ後、 "ああ、瞬間"を持っていた! – trailmax

+0

このアドバイスは正しくないようです。既に存在するインデックスにPutIndexを呼び出すと、InvalidOperationExceptionが発生しています - 既にインデックスが存在しています。私はv2.5を使用しています。私は何か間違っているのですか? – Chris

+2

あなたは3番目の引数をtrueに設定してそれを上書きすることができます –

関連する問題