gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:48:16 24 4
gpt4 key购买 nike

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

我希望在多个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com