【发布时间】:2020-12-22 20:17:25
【问题描述】:
在熟悉 RavenDb 时,我偶然发现了一个重要问题 - 是否可以打开会话、加载文档、然后关闭会话、编辑以前加载的文档、打开另一个会话并更新数据库中的文档?
文档中提供的所有示例仅演示了在单个会话中编辑文档。我也知道补丁操作,但这两种情况都不符合我的要求。
也许有一些类似于 EF 的 SaveOrApdate() 或其他我还不知道的机制?
谢谢。
【问题讨论】:
标签: ravendb
在熟悉 RavenDb 时,我偶然发现了一个重要问题 - 是否可以打开会话、加载文档、然后关闭会话、编辑以前加载的文档、打开另一个会话并更新数据库中的文档?
文档中提供的所有示例仅演示了在单个会话中编辑文档。我也知道补丁操作,但这两种情况都不符合我的要求。
也许有一些类似于 EF 的 SaveOrApdate() 或其他我还不知道的机制?
谢谢。
【问题讨论】:
标签: ravendb
没问题。
您可以打开会话、保存文档和关闭会话。
之后,您可以打开另一个会话,加载您保存的文档,对其进行编辑,然后再次保存。
Company newCompany = new Company
{
Name = companyName,
Phone = companyPhone
};
// Open a session and save a new document
using (IDocumentSession session = DocumentStoreHolder.Store.OpenSession())
{
session.Store(newCompany);
// The new document ID is immediately available, save it for later usage
theNewDocumentId = newCompany.Id;
session.SaveChanges();
}
// Open a session, Load the document, edit & save
using (IDocumentSession session = DocumentStoreHolder.Store.OpenSession())
{
Company company = session.Load<Company>(theNewDocumentId );
company.Name = companyName;
session.SaveChanges();
}
请参阅生成的新文档 ID 的说明:
https://demo.ravendb.net/demos/csharp/basics/create-document#step-3
【讨论】:
Put Command 在数据库中插入或更新文档,而无需使用 Session。见ravendb.net/docs/article-page/5.1/csharp/client-api/commands/…
Session?您可以根据需要使用任意数量。每个会话代表一个业务事务并跟踪您的更改,直到您调用 SaveChanges() 将数据持久化到数据库中。