无法在 RavenDB 3 单元测试中使用事务

Cannot use transactions in RavenDB 3 unittests

我们有几个依赖事务工作的测试。我们现在正尝试从 RavenDB 2.5 迁移到 3.0,在这样做的过程中,所有使用事务的测试都开始失败。我们使用 NUnit 作为我们的测试框架。

我写了一个我们得到的错误的小例子:

[TestFixture]
public class TransactionTest : RavenTestBase
{
    [Test]
    public void TransactionTest1()
    {
        using (var store = NewDocumentStore(configureStore: ConfigureTestStore))
        {
            using (var transaction = new TransactionScope())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new SampleData { Id = "RavenDB" });
                    session.SaveChanges();
                    transaction.Complete();
                }
            }
        }
    }

    public void ConfigureTestStore(EmbeddableDocumentStore documentStore)
    {
        documentStore.RunInMemory = true;
        documentStore.Configuration.RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true;
        documentStore.EnlistInDistributedTransactions = true;
    }
}
public class SampleData
{
    public string Id { get; set; }
}

这导致异常:

System.InvalidOperationException : The database <system> cannot be used with distributed transactions

我可以设置:

documentStore.EnlistInDistributedTransactions = false;

但是 none 我的交易确实有效。上面的测试在 RavenDB 2.5 中运行良好。它不应该也适用于 RavenDB 3 吗?

旧版本:2.5.2874 新版本:3.0.3690

我也在 https://groups.google.com/forum/?hl=sv#!topic/ravendb/2fHg48KkuZM

中发布了这个问题

ayende 回答了这个问题。解决方案是使用 esent 来 运行 测试而不是 voron。

我添加了这个设置:

documentStore.Configuration.DefaultStorageTypeName = "esent";