2013-08-02 34 views
4

我們正在升級到RavenDB 2.5並且遇到了特殊情況。 我們的單元測試之一突然失敗,並且沒有明顯的原因。RavenDB EmbeddableDocumentStore中可能存在的錯誤

下面是一些簡單的代碼來重現問題:

class Foo 
{ 
    public Guid Id { get; private set; } 
    public DateTime? ExpirationTime { get; set; } 

    public Foo() 
    { 
     Id = Guid.NewGuid(); 
     ExpirationTime = null; 
    } 
} 

var documentStore = new EmbeddableDocumentStore 
    { 
     RunInMemory = true, 
     Conventions = { DefaultQueryingConsistency = ConsistencyOptions.QueryYourWrites } 
    }; 
documentStore.Initialize(); 

using (var session = documentStore.OpenSession()) 
{ 
    session.Store(new Foo()); 
    session.Store(new Foo()); 
    session.SaveChanges(); 
} 

所以,現在我們已經在數據庫中兩個文件,都與ExpirationTime = NULL。 這是查詢這些文檔數據庫的時候會發生什麼:

using (var session = documentStore.OpenSession()) 
{ 
    var bar = session.Query<Foo>().Where(foo => foo.ExpirationTime == null).ToList(); 
    Console.WriteLine("1. Number of documents: {0}", bar.Count); 

    bar = session.Query<Foo>().Where(foo => foo.ExpirationTime == null || 
            foo.ExpirationTime > DateTime.Now).ToList(); 
    Console.WriteLine("2. Number of documents: {0}", bar.Count); 

    bar = session.Query<Foo>().Where(foo => foo.ExpirationTime == null | 
            foo.ExpirationTime > DateTime.Now).ToList(); 
    Console.WriteLine("3. Number of documents: {0}", bar.Count);   
} 

這些查詢的輸出結果如下:

1. Number of documents: 2 
2. Number of documents: 0 
3. Number of documents: 2 

這似乎並不正確,我...我希望也給數字2.給予2.

我運行了相同的查詢對RavenDB服務器,並得到了預期的結果,所以這似乎是EmbeddableDocumentStore的問題。

在測試時,我還發現在其他情況下使用邏輯或運算符時會出現一些奇怪的行爲。有時使用foo.HasValue會得到與foo != null不同的結果,但這可能與同一問題有關。

任何其他人都遇到過這個問題?已知的錯誤?

+0

[RavenDb:強制索引要等到單元測試時不會失效](http://stackoverflow.com/questions/10316721/ravendb-force-indexes-to-wait-until-not-陳舊的單元測試) 它可能是一個'陳舊索引'? – NoLifeKing

+0

@NoLifeKing我沒有在示例代碼中顯示它,當單元測試時,我總是使用'DefaultQueryingConsistency = ConsistencyOptions.QueryYourWrites'或'WaitForNonStaleResultsAsOfLastWrite()'。此外,在升級到Raven 2.5之前,它確實按預期工作。 –

+1

請發送一個失敗的單元測試到郵件列表 –

回答

3

這是RavenDB中有關排序空字段的一個錯誤。 固定在下一個版本

相關問題