无法在 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";
我们有几个依赖事务工作的测试。我们现在正尝试从 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";