如何以编程方式使用bundle初始化RavenDb数据库?
我有这段代码,它工作得很好,除了我想确保过期包在数据库中,我不想手动创建这个数据库。启用过期包时初始化数据库的正确方法是什么如何以编程方式使用bundle初始化RavenDb数据库?,ravendb,Ravendb,我有这段代码,它工作得很好,除了我想确保过期包在数据库中,我不想手动创建这个数据库。启用过期包时初始化数据库的正确方法是什么 _documentStore = new DocumentStore() { Url = SettingsManager.RavenDbUrl, DefaultDatabase = SettingsManager.RavenDbDatabaseName
_documentStore = new DocumentStore()
{
Url = SettingsManager.RavenDbUrl,
DefaultDatabase = SettingsManager.RavenDbDatabaseName
};
_documentStore.Initialize();
我找不到医生,也找不到帮助,所以我拼凑了这个:
static class RavenDbExtensions
{
/// <summary>
/// Ensure a bundle is activated
/// </summary>
/// <param name="documentStore"></param>
/// <param name="bundleName"></param>
/// <param name="databaseName"></param>
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(new char[]{';'}).Contains(bundleName, StringComparer.OrdinalIgnoreCase))
settings[Constants.ActiveBundles] = activeBundles + ";" + bundleName;
session.SaveChanges();
}
}
}
我不得不使用(var session=documentStore.OpenSession(“”)但它可以工作!谢谢你,自从回答这个问题以来,一切都发生了。因为它不再工作了。我通过添加session.Advanced.GetMetadataFor(databaseDocument)[Constants.AllowBundlesChange]=true,使其正常工作;当然,正如@ms007所提到的,documentStore.OpenSession(Constants.SystemDatabase)也是必要的
_documentStore = new DocumentStore()
{
Url = SettingsManager.RavenDbUrl
};
_documentStore.Initialize();
_documentStore.ActivateBundle("Expiration", Assembly.GetExecutingAssembly().GetName().Name);
_documentStore.ActivateBundle("DocumentExpiration", Assembly.GetExecutingAssembly().GetName().Name);
_documentStore.DefaultDatabase = Assembly.GetExecutingAssembly().GetName().Name;