RavenDB: получение исключения в памяти Хранилище документов "Ворон склонен к отказу в 32-битном режиме".

После выполнения документации RavenDB

http://ravendb.net/docs/article-page/2.5/csharp/samples/raven-tests/createraventests

Я не могу успешно получить unit test для запуска после создания хранилища документов в памяти. Я скопировал и вставил тестовый образец, найденный в документации выше, используя RavenDB RavenTestBase.

[TestClass]
public class IndexTest : RavenTestBase
{
    [TestMethod]
    public void CanIndexAndQuery()
    {
        using (var store = NewDocumentStore())
        {
            new SampleData_Index().Execute(store);

            using (var session = store.OpenSession())
            {
                session.Store(new SampleData
                {
                    Name = "RavenDB"
                });

                session.SaveChanges();
            }

            using (var session = store.OpenSession())
            {
                var result = session.Query<SampleData, SampleData_Index>()
                    .Customize(customization => customization.WaitForNonStaleResultsAsOfNow())
                    .FirstOrDefault();

                Assert.Equals(result.Name, "RavenDB");
            }
        }
    }
}

public class SampleData
{
    public string Name { get; set; }
}

public class SampleData_Index : AbstractIndexCreationTask<SampleData>
{
    public SampleData_Index()
    {
        Map = docs => from doc in docs
                      select new
                      {
                          doc.Name
                      };
    }
}

При достижении NewDocumentStore()... Я получаю следующее исключение:

"Исключение было не обработано кодом пользователя Ворон склонен к отказу в 32-битном режиме. Используйте Raven/Voron/AllowOn32Bits, чтобы заставить voron в 32-битном процессе.

Я использую Visual Studio 2013 (обновление 4) и RavenDB 3.0

Спасибо!

Ответы

Ответ 1

В конструкторе для передачи NewDocumentStore параметр configureStore. Это действие, которое в качестве параметра принимает значение EmbeddableDocumentStore. В рамках этого действия вы можете установить различные части конфигурации, включая свойство AllowOn32Bits.

public void ConfigureTestStore(EmbeddableDocumentStore documentStore)
{
    documentStore.Configuration.Storage.Voron.AllowOn32Bits = true;
}

Затем передайте это как аргумент configureStore в конструкторе.

using (var store = NewDocumentStore(configureStore:ConfigureTestStore))

Ответ 2

RavenTestBase предоставляет ряд виртуальных членов, которые вы можете переопределить для выполнения общей конфигурации для таких вещей.

Я создаю промежуточный тип, который наследует от RavenTestBase, который выполняет мою общую конфигурацию, а затем использует этот промежуточный тип как родительский тип для моих тестов...

public abstract class IntermediateRavenTestBase : RavenTestBase
{
    protected override void ModifyConfiguration(InMemoryRavenConfiguration configuration)
    {
        base.ModifyConfiguration(configuration);
        // add any plugins you might use...
        configuration.Catalog.Catalogs.Add(new AssemblyCatalog(typeof(NodaTimeCompilationExtension).Assembly));
    }

    protected override void ModifyStore(EmbeddableDocumentStore documentStore)
    {
        base.ModifyStore(documentStore);
        // any common document store config changes...
        // including the Voron setting
        documentStore.Configuration.Storage.Voron.AllowOn32Bits = true;
        documentStore.ConfigureForNodaTime();
        documentStore.Conventions.DefaultQueryingConsistency = ConsistencyOptions.AlwaysWaitForNonStaleResultsAsOfLastWrite;
        documentStore.Conventions.JsonContractResolver = new CustomContractResolver();
    }
}

[TestClass]
public class IndexTest : IntermediateRavenTestBase 
{
    ...
}