2012-07-22 130 views
1

我有以下代码RavenDb查询字符串返回意想不到的结果

 IDocumentSession documentSession = store.OpenSession(); 
     var schools = documentSession.Query<School>().Where(x => x.SchoolName == "My Primary School").ToList(); 
     foreach (var school in schools) 
     { 
      Console.WriteLine(school); 
     } 

     schools = documentSession.Query<School>().Where(x => x.Id == "109940").ToList(); 
     foreach (var school in schools) 
     { 
      Console.WriteLine(school.SchoolName); // returns My Primary School 
     } 

当第一个查询运行,没有记录返回,虽然我在数据库中有匹配记录。然而第二个查询返回我期待的记录。我运行数据库作为嵌入式,我还没有设置任何索引我自己

更新:所以如果我自定义查询等待非陈旧的结果它工作正常,我需要创建一个永久索引?

回答

1

这就是RavenDB的行为。如果没有索引来满足您的查询,RavenDB将在查询时动态创建一个索引,并返回一个陈旧的结果。

这就是您第二次得到预期结果的原因。这是RavenDB的关键设计之一,让索引在后台执行工作,并允许陈旧的结果,而不是阻止查询,直到索引不陈旧。

在生产过程中,一旦RavenDB检测到该索引有正常使用,临时索引将被提升为自动索引。除了在自动索引上进行中继之外,您还可以在某个时刻创建静态索引。

+0

谢谢,我创建了一个索引并修正了结果,我认为Raven会在首次使用时创建索引,然后返回结果,显然情况并非如此。令人惊讶的是,如果我使用开始,一些记录被返回,但其他人没有回来 – 2012-07-23 10:16:24

相关问题