RavenDB-保存或更新实体,在会话外部更改

RavenDB-保存或更新实体,在会话外部更改,ravendb,Ravendb,在熟悉RavenDb的过程中,我遇到了一个重要的问题——是否可以打开会话、加载文档、然后关闭会话、编辑以前加载的文档、打开另一个会话并更新数据库中的文档 文档中提供的所有示例仅在一个会话中演示文档的编辑。我也知道补丁操作,但这两种情况都不符合我的要求 也许有类似EF的saveOrUpdate()或其他机制的东西我还不知道 谢谢。没问题。 您可以打开会话、保存文档并关闭会话。 之后,您可以打开另一个会话,加载保存的文档,编辑它,然后再次保存它 Company newCompany = new Co

在熟悉RavenDb的过程中,我遇到了一个重要的问题——是否可以打开会话、加载文档、然后关闭会话、编辑以前加载的文档、打开另一个会话并更新数据库中的文档

文档中提供的所有示例仅在一个会话中演示文档的编辑。我也知道补丁操作,但这两种情况都不符合我的要求

也许有类似EF的saveOrUpdate()或其他机制的东西我还不知道

谢谢。

没问题。 您可以打开会话、保存文档并关闭会话。
之后,您可以打开另一个会话,加载保存的文档,编辑它,然后再次保存它

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();
}
新公司=新公司
{
名称=公司名称,
电话=公司电话
};
//打开会话并保存新文档
使用(IDocumentSession session=DocumentStoreHolder.Store.OpenSession())
{
session.Store(新公司);
//新文档ID立即可用,请保存以备以后使用
newdocumentid=newCompany.Id;
session.SaveChanges();
}
//打开会话、加载文档、编辑和保存
使用(IDocumentSession session=DocumentStoreHolder.Store.OpenSession())
{
公司=session.Load(newdocumentid);
company.Name=companyName;
session.SaveChanges();
}
有关生成的新文档ID的说明,请参见:

好吧,这与我描述的场景相同——编辑在会话中进行。我的目标-修改与会话外的文档关联的对象。您可以使用
Put命令
在数据库中插入或更新文档,而无需使用会话。查看您为什么不想使用
会话
?你需要多少就用多少。每个会话代表一个业务事务并跟踪您的更改,直到您调用将数据持久化到数据库的
SaveChanges()
。因为常见的场景是这样的:web应用程序从数据库加载文档,然后通过网络将其发送到客户端。然后,客户端可以修改其中一个文档,然后将其发送回服务器,以便在数据库中更新此文档。在一个会话中不可能做到这一点,因为加载和更新操作由两种不同的方法表示。Put命令看起来确实是合理的解决方案,我将尝试一下。