2015-05-28 6 views
15

Nach RavenDB der Dokumentation folgendenRavenDB: Ausnahmebedingung für den Arbeitsspeicher im Dokumentspeicher "Voron ist anfällig für Fehler im 32-Bit-Modus."

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

Ich bin einen Unit-Test erfolgreich zu erhalten, läuft vorbei an der Erstellung des in Speicherdokumentspeicher nicht in der Lage. Ich kopiere und klebte die Testprobe, die in der obigen Dokumentation gefunden wurde, mit RavenDBs 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 
         }; 
    } 
} 

Nach NewDocumentStore erreicht() ... Ich erhalte die folgende Ausnahme:.

„Ausnahme von Benutzercode Voron unhandled war zum Scheitern in 32-Bit-Modus ist anfällig Verwenden Raven/Voron/AllowOn32Bits Voron im 32-Bit-Prozess erzwingen. "

ich Visual Studio 2013 (Update 4) und RavenDB 3.0

Dank bin mit!

+0

ich die wirkliche Lösung fühlen, ist nicht 32bit zu verwenden . –

Antwort

12

Im Konstruktor für NewDocumentStore übergeben Sie den Parameter configureStore Parameter. Dies ist eine Aktion, die EmbeddableDocumentStore als Parameter verwendet. Innerhalb dieser Aktion können Sie verschiedene Teile der Konfiguration festlegen, einschließlich der Eigenschaft AllowOn32Bits.

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

Dann übergeben Sie dies als configureStore Argument im Konstruktor.

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

Danke, das hat bei mir funktioniert. –

+0

Ich empfehle das nicht. Verwenden Sie nicht 32-Bit. –

+0

Ist 32bit das Einzige, das im Embedded-Modus verfügbar ist? – Chrisgh

3

RavenTestBase bietet eine Reihe von virtuellen Elementen, die Sie gemeinsame Konfiguration für solche Dinge zu tun, außer Kraft setzen können.

Ich schaffe einen Zwischentyp, der von RavenTestBase erbt, die meine gemeinsame Konfiguration funktioniert und verwenden Sie dann, dass Zwischentyp als Muttertyp für meine Tests ...

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 
{ 
    ... 
} 
Verwandte Themen