3

我在从 RavenDB 查询时遇到问题[JsonProperty]

以下测试不起作用。

(注意:我知道我使用了新的命名空间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(最新)

4

1 回答 1

1

这似乎是 DocumentSession.Query<> 的查询提供程序中的一个错误,它不会尊重文档上的 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));
        }
    }
于 2013-06-19T20:17:50.663 回答