Raven db:创建一个新数据库

时间:2012-04-19 04:42:42

标签: ravendb

我是raven db的新手。我已阅读API并尝试创建数据库。它具有类似EnsureDatabaseExists函数的功能,如果数据库不存在,它将创建数据库。它实际上使用DocumentDatabase类型来创建该数据库。我使用它并创建数据库,但我想直接使用此对象,以便使用此对象,我可以直接使用文档。我做对了吗?或者可以有更好的方法来处理文档。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为你混淆了数据库文档和查询文档。

数据库文档是默认数据库上的文档,它仅代表RavenDB中的数据库,该数据库不是默认数据库。它存储一些数据,如数据库名称和位置。你作为ravendb的消费者与这份文件毫无关系。这与查询任何其他文件无关。

查看here以了解如何查询ravendb文档。为了查询特定数据库,如果您只使用该数据库而不是最好,只需在connection string中指定数据库名称即可。如果您同时处理多个数据库,则可以在打开会话时指定所需的数据库名称store.OpenSession("database-name")

答案 1 :(得分:0)

store.DatabaseCommands.GlobalAdmin提供了三种方法。

  • GetDatabaseNames:列出数据库名称
  • EnsureDatabaseExists:创建数据库(如果不存在)
  • CreateDatabase:创建数据库

请注意DocumentStore.Initialize()已确保已创建数据库。您可以传递布尔值false以避免此行为。

// init store object, you pass the service URL + the database name
var store = new DocumentStore("http://localhost:8001/databases/MyNewDataBase");
store.Initialize(false);

// most simple thing is:
var dbName = store.DefaultDatabase;
store.DatabaseCommands.GlobalAdmin.EnsureDatabaseExists(dbName);

如果您想在不创建的情况下进行检查:

// there is a method to list the database names
bool exists = false;
for (int i = 0; i < int.MaxValue; i++)
{
    var names = store.DatabaseCommands.GlobalAdmin.GetDatabaseNames(100, i * 100);    
    if (names.Contains(dbName))
    {
        exists = true;
        break;
    }

    if (names.Length < 100)
    {
        // no more databases
        break;
    }
}

if (exists)
{
    // database exists, do something
}

参考:https://ravendb.net/docs/article-page/3.5/Csharp/client-api/commands/how-to/create-delete-database