我无法使用[JsonProperty]
从RavenDB查询。
以下测试不起作用。
(注意:我知道我使用了新的命名空间Raven.Imports.Newtonsoft.Json
):
using System.Linq;
using NUnit.Framework;
using Raven.Client.Embedded;
using Raven.Imports.Newtonsoft.Json;
namespace RavenTest
{
[TestFixture]
public class RavenFixture
{
protected EmbeddableDocumentStore DocumentStore;
[SetUp]
public void BaseSetUp()
{
DocumentStore = new EmbeddableDocumentStore { RunInMemory = true };
DocumentStore.Initialize();
}
[Test]
public void Test()
{
using (var session = DocumentStore.OpenSession())
{
session.Store(new Parent {Inner = new Child {Num = 1}});
session.SaveChanges();
}
using (var session = DocumentStore.OpenSession())
{
var list = session.Query<Parent>().Customize(x => x.WaitForNonStaleResultsAsOfNow())
.Where(x => x.Inner.Num == 1)
.ToList();
Assert.That(list.Count, Is.EqualTo(1));
}
}
public class Parent
{
public string Id { get; set; }
//If you comment this out, it will work
[JsonProperty("N")]
public Child Inner { get; set; }
}
public class Child
{
[JsonProperty("M")]
public int Num { get; set; }
}
}
}
但是,如果我注释掉[JsonProperty("N")]
行,它会按预期工作。
这是一个错误还是我做错了什么?
我正在使用RavenDB 2.5.0.0(最新版)
答案 0 :(得分:1)
这似乎是DocumentSession.Query&lt;&gt;的查询提供程序中的错误它不会尊重文档中的Newtonsoft属性。
但是,如果您使用Lucene查询提供程序,它将按预期执行:
[Test]
public void Test()
{
using (var session = DocumentStore.OpenSession())
{
session.Store(new Parent {Inner = new Child {Num = 1}});
session.SaveChanges();
}
using (var session = DocumentStore.OpenSession())
{
var list = session.Advanced.LuceneQuery<Parent>()
.WhereEquals(x => x.Inner.Num, 1)
.ToList();
Assert.That(list.Count, Is.EqualTo(1));
}
}