RavenDB起步--客户端API(三)

简介: 客户端API(三)

Delete()

我们可以通过 Delete 方法来删除文档,这个方法接受实例实体或文档 ID。下面的代码就是删除文档的方法:

var task = session.Load<ToDoTask>("ToDoTasks/1-A");
session.Delete(task); // delete by instance
session.Delete("ToDoTasks/1-A"); // delete by ID

这里咬住,Delete 方法并不会删除文档,只是将文档在会话中标记为在已删除,只有在调用 SaveChanges 方法文档才会被删除。

Query()

在项目中大部分情况我们会使用查看,在这个专题中已经展示了一些查询的代码,因此在这一小节就不再列出查询代码了。和通过Load调用加载的文档一样,通过 Query 加载的文档也是由会话管理的。我们修改或者删除文档后,同样也需要调用SaveChanges 方法来更新 RavenDB,而且利用 Query 查询出来的文档在会话中也只有一个实例,不管你查询了多少次。这里要注意 RavenDB 不允许在查询期间进行计算(例如:SUM、AVG 这类的计算),并且它不存在表扫描或慢查询的问题。我们将在第三部分中详细说明原因并介绍有关索引的详细信息,但现在您可以看到大多数查询都适合您。

Store()

Store 方法是会将实体与会话关联在一起。只有在我们要创建一个新文档的时候才会这么去做。案例代码如下:

var person = new Person
{
    Name = "Oscar Arava"    
};
session.Store(person);

同样,与 Delete 方法一样,只有在调用 SaveChanges 方法后,数据才会真正的保存在 RavenDB 中,并且对于新增来说,RavenDB 会为新实体提供一个 ID。除了保存新实体外,Store 还可以将现有文档实体与会话相关联,这种情况一般用在服务武器将实体发送给客户端,客户端修改实体后再发送回 Web 应用程序。但这时发现它没有被会话加载也没有被跟踪。那么就可以调用 Store 方法来将实体和会话绑定在一起,并且它的 ID 不是空的,RavenDB 认为它以存在于库中,因此将会以更新的形式存入库中。

SaveChanges()

SaveChanges 方法的作用是检查所有删除和更改的会话状态,然后将这些作为一个事务发送到服务器,因此这就保证了不会因为中途产生异常而部分保存失败。调用 SaveChanges 方法时,将检查数据库中加载的实体和当前的实体是否有变动。如果有变动,那么该实体将被保存到数据库中。代码如下:

using (var session = documentStore.OpenSession())
{
    // do some work with the session
    session.SaveChanges();
}

Advanced

前面的 API 都是常见的场景,但是肯定还有一些不常见的场景,遇到不常用的场景我们可以使用 Advanced 来解决。例如我们可以使用它在每个会话的基础上配置乐观并发的行为:

session.Advanced.UseOptimisticConcurrency = true;

也可以通过修改约定来全局定义:

documentStore.Conventions.UseOptimisticConcurrency = true;

具体的内容我会在后续专题将会具体讲解。

目录
相关文章
|
3天前
|
前端开发 JavaScript API
基于React的简易REST API客户端设计与实现
基于React的简易REST API客户端设计与实现
26 3
|
3天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
11 0
|
3天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
16 3
|
3天前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
34 11
|
3天前
|
JSON Java API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
102 0
|
3天前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
28 0
|
3天前
|
Java API
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
93 0
|
缓存 API
|
1天前
|
监控 安全 数据挖掘
Email 接口API有哪些?具体分析一下阿里云和AOK的优点
本文介绍了常见的Email接口API,如阿里云邮件推送、AOKSend、SendGrid、Mailgun和Amazon SES。阿里云API以其高稳定性和数据分析功能脱颖而出,支持批量发送和多语言;而AOKSend API以易于集成、高安全性和优秀客户支持为亮点。企业在选择时应考虑自身需求和预算,以优化邮件营销效果。
|
1天前
|
定位技术 API
Angular 调用导入百度地图API接口,2024春招BAT面试真题详解
Angular 调用导入百度地图API接口,2024春招BAT面试真题详解

热门文章

最新文章