我的第一个想法是考虑一些工作单元模式,但我正在做的是非常小而轻,我想避免过度设计我的解决方案..
我希望在多个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();
}
}
答案 0 :(得分:4)
你做不到。会话旨在在单个数据库上运行。
但是,您可以获得两个会话以参与同一个交易。
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();
}
如果第二个操作因任何原因失败,第一个操作也将被回滚 - 即使您已保存更改并完成了会话。