2014-02-13 70 views
1

我有这个代码,它工作得很好除了我想确保expiration包在数据库中,我不想手动创建此数据库。在启用过期包的情况下初始化数据库的正确方法是什么?如何以编程方式初始化捆绑RavenDb数据库?

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

回答

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; 
+1

我 使用使用(VAR会话= documentStore.OpenSession( “”)) 但它的作品!谢谢 – ms007

+0

此答案发生了一些事情。因为它不再有效。我通过添加session.Advanced.GetMetadataFor(databaseDocument)[Constants.AllowBundlesChange] = true;当然,@St007提到的documentStore.OpenSession(Constants.SystemDatabase)也是必须的 –

相关问题