该代码很好,但它只是创建了版本控制包将要查找的配置信息。它实际上并没有启用捆绑包。
对于任何命名的包,您可以通过在Raven/ActiveBundles
设置中包含名称来启用它,这是一个以分号分隔的包名称列表。
“命名”包是指那些使用属性导出"Bundle"
名称的包。[ExportMetadata]
所有内置捆绑软件都执行此操作。"Versioning"
(如果您深入研究其中一个触发器的源代码,您可以看到 Versioning Bundle 导出了名称)。
如果捆绑包未命名,则它始终处于启用状态,只要它存在于 RavenDB 服务器程序集中或\plugins
文件夹中的单独程序集中。
看起来文档需要更新,因为它仍然说将Raven.Bundles.Versioning.dll
程序集放在插件文件夹中。这不再存在,因为它在 2.0 中被移动到主要的 RavenDB 服务器程序集中。因此,对于这个特定的捆绑包,只需编辑设置就足够了。
命名租户数据库的设置保存在系统数据库中名为Raven/Databases/<YourDatabaseName>
. 只需编辑此文档一次,捆绑包就会被激活。这是一个可以为您做到这一点的扩展方法:
public static void ActivateBundle(this IDocumentStore documentStore, string bundleName, string databaseName)
{
using (var session = documentStore.OpenSession())
{
var databaseDocument = session.Load<DatabaseDocument>("Raven/Databases/" + databaseName);
var settings = databaseDocument.Settings;
var activeBundles = settings.ContainsKey(Constants.ActiveBundles) ? settings[Constants.ActiveBundles] : null;
if (string.IsNullOrEmpty(activeBundles))
settings[Constants.ActiveBundles] = bundleName;
else if (!activeBundles.Split(';').Contains(bundleName, StringComparer.OrdinalIgnoreCase))
settings[Constants.ActiveBundles] = activeBundles + ";" + bundleName;
session.SaveChanges();
}
}
使用上述方法,您可以简单地调用:
documentStore.ActivateBundle("Versioning", "YourDatabaseName");
如果您正在运行嵌入式模式数据库,则没有命名的租户数据库,因此该过程有点不同。您可以将设置放入您自己的 app.config 文件中,也可以documentStore.Configuration.Settings
在现有调用documentStore.Initialize()
. 以下是适用于嵌入式数据库的扩展方法的修订版本:
public static void ActivateBundle(this EmbeddableDocumentStore documentStore, string bundleName)
{
var settings = documentStore.Configuration.Settings;
var activeBundles = settings[Constants.ActiveBundles];
if (string.IsNullOrEmpty(activeBundles))
settings[Constants.ActiveBundles] = bundleName;
else if (!activeBundles.Split(';').Contains(bundleName, StringComparer.OrdinalIgnoreCase))
settings[Constants.ActiveBundles] = activeBundles + ";" + bundleName;
}
使用此方法,您可以简单地执行以下操作:
documentStore.ActivateBundle("Versioning");
documentStore.Initialize();