2016-03-20 20 views
0

Ben RavenDb için mutlak bir başlangıç ​​yapıyorum ama SQL kullanarak EF ve depo modelinde çok deneyimliyim. Sonunda denemek için etrafta dolaşmak, böylece başka bir uygulama üzerinde yaşlanan SQLLite EF uygulamasını değiştirme niyetiyle RavenDB.Embedded kullanarak basit bir konsol uygulaması oluşturdum. Her neyse, mağazaya 1000'den fazla kayıt yazmayı ve bir akışla okumayı deniyorum. Aşağıdaki örnek kod: Ben bu oldukça ilkel olduğunu farkRavenDb Stream hiç sonuç döndürüyor

var store = new EmbeddableDocumentStore 
     { 
      DataDirectory = "data" 
     }; 
     store.Initialize(); 



     using (IDocumentSession session = store.OpenSession()) 
     { 

      for (var t = 1; t < 1000; t++) 
      { 
       var subtest = new Test 
       { 
        Id = new Guid(), 
        SubTest = new SubTest 
        { 
         Name = "NewTest", 
         Id = new Guid() 
        } 
       };      
       session.Store(subtest); 
      } 
      session.SaveChanges(); 
     } 

     store 
      .DatabaseCommands 
      .PutIndex("SubTest/All", 
       new IndexDefinitionBuilder<SubTest>() 
       { 
        Map = tests => tests 
         .Select(test => new 
         { 
          SubTest = test.SubTest, 
          Id = test.Id 
         }) 
       }); 

     using (IDocumentSession session = store.OpenSession()) 
     { 
      var query = session.Query<Test>("SubTest/All"); 

      var listt = query.ToList(); 

      using (var enumerator = session.Advanced.Stream(query)) 
      { 
       while (enumerator.MoveNext()) 
       { 
        var t = enumerator.Current.Document; 
        System.Console.WriteLine(t.Id); 
       } 
      }; 
     } 

     System.Console.ReadLine(); 

ve ben çok kodumu düzeltmek için birini arıyorum değil. Sadece birisinin indeks olayının bir akımla nasıl çalışacağını ve belki sayımın neden sonuçlarının olmadığını açıklayabileceğini anlamamı bekliyorum. Eğer .Query yerine .Load kullanırsam sonuçlar elde ederim (128'i), bu yüzden geri kalanının işe yarayacağına eminim.

Yukarıdaki PutIndex olayını denedim ancak benzer şekilde kafa karıştırıcı sonuçlar veren AbstractIndexCreationTask'ı da denedim. Gerçekten bu online garip bir şekilde çok fazla bilgi bulamıyorum, bu gerçekten nadir mi?

cevap

1

Sonunda bunu anladım. Belgelerin Akış API'sı ile ilgili birkaç önemli ayrıntıdan yoksun olduğu görünüyor. Temel olarak doğru yoldaydım, sadece kodda daha önce indeksi oluşturmam gerekiyordu. PutIndex yönteminden daha iyi sevdiğim AbstractIndexCreationTask kullanarak bitti, ancak aynı şeyi yapıp yapmadıklarından emin değilim. Bu numuneye ilişkin nota

public class TestIndex : AbstractIndexCreationTask<Test> 
{ 
    public TestIndex() 
    { 
     this.Map = tests => 
      from t in tests 
      select new 
      { 
       t.Id, 
       t.SubTest 
      }; 
    } 
}  
+1

ilginç bir şey ilk kez onun tarafından işletilen akışı sonuç verir olmasıdır:

 var store = new EmbeddableDocumentStore { DataDirectory = "data" }; store.Initialize(); **IndexCreation.CreateIndexes(typeof(TestIndex).Assembly, store);** using (IDocumentSession session = store.OpenSession()) { for (var t = 1; t < 100; t++) { var subtest = new Test { Id = new Guid(), SubTest = new SubTest { Name = "NewTest", Id = new Guid() } }; session.Store(subtest); } session.SaveChanges(); } using (IDocumentSession session = store.OpenSession()) { IQueryable<Test> query = session.Query<Test, TestIndex>(); var enumerator = session.Advanced.Stream(query); while (enumerator.MoveNext()) { var t = enumerator.Current.Document; System.Console.WriteLine(t.Id); } } 

Ve My Index: Her durumda, bu çalışır. Okuduğum bilgilere dayanarak, henüz eklediğim veriler henüz dizine eklenmiş değil ve akış endeksleme için beklemiyor. – Brandon

+1

PutIndex ve bir AbstractIndexCreationTask oluşturma aynı şeyi yapın: bir dizin oluşturun. Sonunu öneririm. –

+1

Orijinal örnek, henüz dizine alınmadığı için öğe döndürmez. Dizinin eski olmaması (yani, indekslemeyi bitirmesi) için beklerseniz, sonuç elde edersiniz. (temelde RavenDB indekslerinin tutarlılığıyla karşılaşırsınız). – Michael

İlgili konular