我们正在升级到RavenDB 2.5,并遇到了一个特殊的情况。 我们的一个单元测试突然失败,并且没有明显的原因。
以下是一些重现问题的简单代码:
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 :(得分:3)
这是RavenDB中与空字段排序相关的错误。 修复了下一个版本