在代码中创建新数据库,RavenDB

5

我正在运行 RavenDB.Client 2.0.2173-Unstable。 我正在创建一个多租户系统,作为我的注册流程的一部分,我想创建一个新的 Raven 数据库。

我有三行简单的代码..

  string newDBName = "1234";
  IDocumentStore documentStore = new DocumentStore { Url = "http://myserver:8080",    DefaultDatabase = newDbName};
  documentStore.Initialize();
  documentStore.DatabaseCommands.EnsureDatabaseExists(newDBName);

根据建议,我也尝试了这个:

  string newDBName = "1234";
  IDocumentStore documentStore = new DocumentStore { Url = "http://myserver:8080"};
  documentStore.Initialize();
  documentStore.DatabaseCommands.EnsureDatabaseExists(newDBName);

在最后一行我收到了一个InvalidOperationException异常,Raven告诉我它无法确定该怎么做。

<h1>Could not figure out what to do</h1>

        <p>Your request didn't match anything that Raven knows to do, sorry...</p>

我知道我的连接/服务器是正常的,因为我能够从默认数据库读写。

这是权限问题吗?

2个回答

3

您不能从当前所在的数据库中创建一个新的数据库。将DefaultDatabase字段留空,这样您就可以连接到RavenDB系统数据库。然后您应该能够创建新的租户数据库。

同时,请确保在打开会话、创建索引和使用DatabaseCommands时传递租户数据库名称。


嗨,马特。我也尝试了那个方法,但是还是出现了相同的错误。内部异常是一些HTTP 400错误,如果这有帮助的话。它在EnsureDatabaseExists上一直失败。我可以传递任何字符串,但仍然会失败。我可以很好地与默认数据库交互。 - Dave
这毫无意义。你的服务器是否也是相同版本的raven? - Matt Johnson-Pint
2
在2033版本左右,用于创建数据库的内部API已经发生了变化。如果你的服务器版本低于此,那么这可能会导致错误。 - Matt Johnson-Pint
确实是这个原因导致它没有工作。我也将服务器更新到2173,现在一切都很好。谢谢Matt! - Dave

2
在Ravendb v4中,您可以使用CreateDatabaseOperation来在服务器上创建一个新的数据库。
store.Maintenance.Server.Send(
         new CreateDatabaseOperation(new DatabaseRecord("MyNewDatabase")));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接