如何用程序包初始化RavenDb数据库?

时间:2014-02-13 17:56:17

标签: ravendb

我有这个代码它运行良好除了我想确保过期包在数据库中,我不想手动创建这个数据库。在启用过期捆绑包的情况下初始化数据库的正确方法是什么?

        _documentStore = new DocumentStore()
            {
                Url = SettingsManager.RavenDbUrl,
                DefaultDatabase = SettingsManager.RavenDbDatabaseName
            };
        _documentStore.Initialize();

1 个答案:

答案 0 :(得分:2)

好吧,我找不到文档,我找不到帮助,所以我拼凑了这个:

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();
        }
    }
}

然后我在初始化文档存储时做这个小舞蹈。它似乎运作良好。目前还不清楚该捆绑包是名为Expiration还是DocumentExpiration所以我尝试它并没有崩溃,它似乎在我需要的过期功能中折叠。

        _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;