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月前
|
存储 API Apache
【zookeeper 第三篇章】客户端 API
本文介绍了Apache ZooKeeper客户端的一些常用命令及其用法。首先,`create`命令用于创建不同类型的节点并为其赋值,如持久化节点、有序节点及临时节点等。通过示例展示了如何创建这些节点,并演示了创建过程中的输出结果。其次,`ls`命令用于列出指定路径下的所有子节点。接着,`set`命令用于更新节点中的数据,可以指定版本号实现乐观锁机制。
32 0
|
2月前
|
负载均衡 API 数据安全/隐私保护
Zookeeper的客户端-原生的API
Zookeeper的客户端-原生的API
|
3月前
|
安全 API 网络安全
【Azure API 管理】APIM如何配置客户端证书的CRL检测策略
【Azure API 管理】APIM如何配置客户端证书的CRL检测策略
|
3月前
|
测试技术 编译器 Go
依赖注入与控制反转:优化Go语言REST API客户端
依赖注入与控制反转:优化Go语言REST API客户端
|
3月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
141 0
|
3月前
|
API
【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
|
3月前
|
存储 安全 API
【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."
【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."
|
缓存 API
|
7天前
|
供应链 数据挖掘 API
电商API接口介绍——sku接口概述
商品SKU(Stock Keeping Unit)接口是电商API接口中的一种,专门用于获取商品的SKU信息。SKU是库存量单位,用于区分同一商品的不同规格、颜色、尺寸等属性。通过商品SKU接口,开发者可以获取商品的SKU列表、SKU属性、库存数量等详细信息。
|
8天前
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应