前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RavenDB起步--第一个 RavenDB 程序

RavenDB起步--第一个 RavenDB 程序

作者头像
喵叔
发布2022-01-24 10:33:47
3500
发布2022-01-24 10:33:47
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏

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

新建项目

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

代码语言:javascript
复制
var store = new DocumentStore
{
    Urls = new[] { "http://localhost:8080" },
    Database = "Tasks"
};

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

新增

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

代码语言:javascript
复制
public class ToDoTask
{
    public string Id { get; set; }
    public string Task { get; set; }
    public bool Completed { get; set; }
    public DateTime DueDate { get; set; }
}

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

  1. 打开会话;
  2. 创建新的 ToDoTask 实体对象;
  3. 将实体对象传入会话中;
  4. 执行保存操作;
  5. 释放会话。

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

代码语言:javascript
复制
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 中。

修改

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

代码语言:javascript
复制
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 设计模式,因此对于任意复杂程度的内容我们不需要手动跟踪对象的更改以及决定要保存对象的哪些内容,这样就减少了网络请求。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新建项目
  • 新增
  • 修改
  • 注意
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档