RavenDb检查索引是否存在
问题描述:
如何检查索引是否存在? - 打电话之前,我看过RavenDb检查索引是否存在
IndexCreation.CreateIndexes(typeof(MyIndexClass).Assembly, documentStore);
所有的例子(包括示例项目中的那些)具有指数重新创建客户端启动,每次它看起来不正确。
什么是一般策略?看起来好像是正常的CRUD操作,然后是管理命令,例如上面的索引。人们是否只是创建一个控制台应用程序来管理和部署/运行与主应用程序分开?
答
您不必检查是否存在。服务器将自动比较您发送的索引定义并检查它是否已经存在。如果存在一个具有相同名称和定义的名称,则将其单独保留。如果存在一个名称相同的名称,但定义已更改,则删除旧的名称并创建新名称。
通常人们会在应用程序启动时在同一应用程序中创建索引。对于可能位于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());
还有其他几个,但你明白了。
而只是为了要彻底,如果你真的没想检查索引所有脑干,你可以使用:
documentStore.DatabaseCommands.GetIndex("YourIndex") != null
但是,这只能通过名字查询,而不是定义。你不需要它。
我知道这并不能回答你的问题,但我觉得值得一提的是,如果你愿意,RavenDB会为你自动创建索引。参见[这个RavenDB文档页面](http://ravendb.net/docs/client-api/querying),特别是关于动态索引的部分。 – ean5533
@ ean5533 - 适用于动态索引,是的。我相信OP会关注静态索引的创建。 –