ravendb - 如何在 RavenDB 中跨多个数据库维护 IDocumentSession 范围?

标签 ravendb

我的第一个想法是考虑一些工作单元模式,但我正在做的是非常小和轻量级的,我想避免过度设计我的解决方案..

我希望在多个 RavenDB 数据库中有一个单一的事务范围......类似

class WidgetFacade
{
    void SaveData (Widget widget, User user)
    {
          IDocumentStore documentStore = new DocumentStore { Url = "http://server:8080/" };

          IDocumentSession session  = documentStore.OpenSession("database1");
          session.Store(user);

          session = documentStore.OpenSession("database2");
          session.Store(widget);
          session.Savechanges();
          session.Dispose();
    }    
}

最佳答案

你不能。 session 旨在对单个数据库进行操作。

但是,您可以让两个 session 参与同一事务。

var documentStore = new DocumentStore { Url = "http://server:8080/" };

using (var ts = new TransactionScope())
{
   using (var session = documentStore.OpenSession("database1"))
   {
      session.Store(user);
      session.SaveChanges();
   }

   using (var session = documentStore.OpenSession("database2"))
   {
      session.Store(widget);
      session.SaveChanges();
   }

   ts.Complete();
}

如果第二个操作因任何原因失败,第一个操作也将回滚 - 即使您已保存更改并完成 session 。

关于ravendb - 如何在 RavenDB 中跨多个数据库维护 IDocumentSession 范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061591/

相关文章:

indexing - 在 RavenDB 中创建更多类似的内容

c# - RavenDb 搜索多个字符串属性

c# - 初始化 RavenDb-Embedded 时出现 EsentFileNotFoundException.FileNotFound 异常

asp.net-mvc - 如何在数据层或类中使用RavenDB查询?

.net - 删除所有附件

document-database - 如何避免在RavenDB之类的文档数据库中重复数据?

ravendb - Include<TResult, TInclude> 的正确使用方法

ravendb - 在属性不存在的 raven 3.5 中向文档添加一个字段

c# - 删除RavenDB中的所有文档

RavenDb:文档刷新功能不会在@refresh 标志指定的时间或之后运行