RavenDB起步--个 RavenDB 程序

2022-04-14 00:00:00 操作 代码 对象 会话 保存

本篇文章将带领大家实现一个小的 RavenDB 案例程序,要求是这样的:实现一个 ToDoList 程序,可以对它进行新增、修改。下面我们开始吧!

新建项目

我们将这个项目新建为控制台应用程序。我们在 VS 中创建一个名为 Rvn 的控制台应用程序。项目新建成功后,我们需要在项目中安装 RavenDB 的包。在 NuGet b包管理其中查找 RavenDB.Client 包并安装它。完成这些步骤之后,我们在 Program 代码的头部引入 Raven.Client.Documents 。
到这里我们已经完成了代码的步工作,下面我们将会通过创建一个 DocumentStore 实例并对其进行配置来完成对 RavenDB 的链接工作,代码如下:

var store = new DocumentStore
{
    Urls = new[] { "http://localhost:8080" },
    Database = "Tasks"
};

在上面的代码中我们通过 DocumentStore 实例指定了 RavenDB 节点的链接地址,以及要链接的数据库。目前我们只需要这两个属性就足够了,其他属性我将在后续的章节中讲解。设置完之后,我们在 RavenDB Studio 中创建 Tasks 数据库,具体怎么创建我就不多说了,有不会的小伙伴请去查看上一篇文章。

新增

既然要操作 RavenDB 肯定就少不了实体类,虽然说 RavenDB 使用的是完全动态的数据库,但是在实际开发中大多数情况都需要使用实体类。因此我们先来定义一下实体类,代码如下:

public class ToDoTask
{
    public string Id { getset; }
    public string Task { getset; }
    public bool Completed { getset; }
    public DateTime DueDate { getset; }
}

接着我们来实现新增的功能,代码操作 RavenDB 的流程其实和操作关系型数据库的流程一样:

  1. 打开会话;

  2. 创建新的 ToDoTask 实体对象;

  3. 将实体对象传入会话中;

  4. 执行保存操作;

  5. 释放会话。

将上述步骤翻译成代码,如下所示:

using (var session = store.OpenSession())
{
    var task = new ToDoTask
    {
        DueDate = DateTime.Today.AddDays(1),
        Task = "Buy milk"
    };
    session.Store(task);
    session.SaveChanges();
}

上面的代码中,首先打开新会话并创建了新的 ToDoTask 实体对象. 然后将任务存储在会话中并调用 SaveChanges 方法将会话中的所有更改保存到 RavenDB 中。

修改

修改的实现代码和新增的代码类似,代码如下:

using (var session = store.OpenSession())
{
    var task = session.Load<ToDoTask>("ToDoTasks/1-A");
    task.Completed = true;
    session.SaveChanges();
}

注意

  1. 在开发中除非特殊的情况下我们才会每执行一次 CURD 就去执行一次 SaveChange 方法,大部分情况我们会将同一个会话中的所有操作执行完后采取执行 SaveChange 方法,在这里我们不需要担心如果在中途出先异常,数据只保存了部分的问题,这时因为 RavenDB 具有其他 NoSQL 数据库所没有的真正的事务,要么全部保存成功,要么全部保存失败,不会出现部分成功和部分失败的问题。

  2. 如果我们没有修改数据,但是调用了 SaveChange 方法,那么不会向库中提交任何数据,这是因为 RavenDB 客户端会检测到所提交的数据和库中存储的一样,因此不会产生保存操作。

  3. 因为 RavenDB 的文档会话实现了 Unit of Work 和 Identity Map 设计模式,因此对于任意复杂程度的内容我们不需要手动跟踪对象的更改以及决定要保存对象的哪些内容,这样就减少了网络请求。

来自:https://mp.weixin.qq.com/s/VQ6Ge8QF94GFsKzUr2Pk0g

相关文章