【发布时间】: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