Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式使用bundle初始化RavenDb数据库?_Ravendb - Fatal编程技术网

如何以编程方式使用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;