2

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

4

2 回答 2

1

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

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

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

于 2012-04-19T09:02:02.523 回答
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

于 2017-09-11T14:50:14.837 回答