RavenDB模式迁移

RavenDB模式迁移,ravendb,database-migration,Ravendb,Database Migration,我想更改我的RavenDB“模式”,并在ASP.Net MVC web app启动时执行迁移 机制似乎符合目的,我试着像这样使用它: store.DatabaseCommands.UpdateByIndex( "Raven/DocumentsByEntityName", new IndexQuery { Query = "Tag:LogEntries", }, new ScriptedPatchRequest() {

我想更改我的RavenDB“模式”,并在ASP.Net MVC web app启动时执行迁移

机制似乎符合目的,我试着像这样使用它:

store.DatabaseCommands.UpdateByIndex(
    "Raven/DocumentsByEntityName",
    new IndexQuery
    {
        Query = "Tag:LogEntries",
    },
    new ScriptedPatchRequest()
    {
        Script = @"
                    this.IsDeleted = false;
                "
    }
).WaitForCompletion();
问题是,如果索引过时,该修补程序只会抛出异常。但我确实需要确保在继续运行应用程序之前执行了迁移。是否有比将其包装在以下内容中更好的替代方案:

while (true)
{
    try
    {
        RunPatch();
        break;
    }
    catch (Exception)
    {
    }
}
使用Entity Framework或NHibernate(FluentMigrations),可以轻松地编写迁移类,为其分配版本,然后按适当的顺序自动执行所需的迁移


Raven是否有类似的内置机制?或者任何已知的最佳实践?

这里有一个答案,尽管是在你问了6年之后!GitHub上有RavenMigrations项目:


这是一个针对RavenDB的迁移框架,类似于您将在关系数据库中找到的迁移框架。

为什么需要如此庞大的设置?我将一些迁移脚本保存在单独的控制台应用程序中,并在需要时针对本地/远程存储运行它们。通常你只需要做一次。除非你做得太多,否则任何其他事情都是多余的。您可以使用流API轻松地更改内容、存储它们,然后保存更改。对于一次性的东西,内存不是问题。还有一个问题:对于*ByIndex命令,还有一个重载“allowStale”,可以设置为
true
。如果您想确保它运行,可以等待非陈旧索引(但要知道,如果有大量更新发生,这可能需要很长时间)。对于上面的特定用例,我将编写一个一次性脚本来运行,以确保它一次命中每个文档。