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

时间:2015-07-03 07:09:35

标签: testing transactions nunit ravendb nosql

我们有几个依赖于交易的测试。我们现在正试图从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;

但是,我的交易都没有实际运作。上面的测试在RavenDB 2.5中运行良好。是不是也不应该在RavenDB 3中工作?

旧版本:2.5.2874 新版本:3.0.3690

1 个答案:

答案 0 :(得分:0)

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

中发布了这个问题

艾恩德回答说。解决方案是使用esent来运行测试而不是voron。

我添加了这个设置:

documentStore.Configuration.DefaultStorageTypeName = "esent";