【问题标题】:RavenDB schema migrationsRavenDB 模式迁移
【发布时间】:2018-06-11 04:54:46
【问题描述】:

我想更改我的 RavenDB“架构”并在 ASP.Net MVC Web 应用程序启动时执行迁移。

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

store.DatabaseCommands.UpdateByIndex(
    "Raven/DocumentsByEntityName",
    new IndexQuery
    {
        Query = "Tag:LogEntries",
    },
    new ScriptedPatchRequest()
    {
        Script = @"
                    this.IsDeleted = false;
                "
    }
).WaitForCompletion();

问题是,如果索引过时,Patch 将简单地抛出异常。但我真的需要确保在继续运行应用程序之前执行了迁移。是否有比将其包装在以下内容中更好的选择:

while (true)
{
    try
    {
        RunPatch();
        break;
    }
    catch (Exception)
    {
    }
}

使用 Entity Framework 或 NHibernate (FluentMigrations) 很容易编写迁移类,为其分配版本,然后所需的迁移将按正确的顺序自动执行。

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

【问题讨论】:

  • 为什么需要如此庞大的设置?我将一些迁移脚本保存在单独的控制台应用程序中,并在需要针对本地/远程商店时运行它们。通常你只需要这样做一次。恕我直言,其他任何事情都是矫枉过正的,除非你这样做了。您可以使用 Stream API 轻松更改内容、存储它们,然后保存更改。对于一次性的东西,内存不是问题。
  • 还有这个:ayende.com/blog/66563/ravendb-migrations-rolling-updates 此外,对于 *ByIndex 命令,“allowStale”有一个重载,您可以将其设置为 true。如果您想确保它运行,您可以等待非陈旧索引(但要了解是否有大量更新发生,这可能需要很长时间)。对于您上面的特定用例,我会编写一个一次性脚本来运行,以确保它同时命中每个文档。

标签: ravendb database-migration


【解决方案1】:

这是一个答案,尽管您问了 6 年!这里有 GitHub 上的 RavenMigrations 项目:

https://github.com/migrating-ravens/RavenMigrations

这是 RavenDB 的迁移框架,类似于关系数据库的迁移框架。

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 2010-11-16
    • 2018-07-19
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多