Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用[JsonProperty]序列化内部属性的RavenDB查询_C#_Ravendb - Fatal编程技术网

C# 使用[JsonProperty]序列化内部属性的RavenDB查询

C# 使用[JsonProperty]序列化内部属性的RavenDB查询,c#,ravendb,C#,Ravendb,我在使用[JsonProperty]从RavenDB查询时遇到问题 以下测试不起作用 (注意:我知道我使用了新的名称空间Raven.Imports.Newtonsoft.Json): 使用System.Linq; 使用NUnit.Framework; 使用Raven.Client.Embedded; 使用Raven.Imports.Newtonsoft.Json; 命名空间RavenTest { [测试夹具] 公共类RavenFixture { 受保护的嵌入式文档库文档库; [设置] publi

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

以下测试不起作用

(注意:我知道我使用了新的名称空间
Raven.Imports.Newtonsoft.Json
):

使用System.Linq;
使用NUnit.Framework;
使用Raven.Client.Embedded;
使用Raven.Imports.Newtonsoft.Json;
命名空间RavenTest
{
[测试夹具]
公共类RavenFixture
{
受保护的嵌入式文档库文档库;
[设置]
public void BaseSetUp()
{
DocumentStore=newEmbeddedBleDocumentStore{RunInMemory=true};
初始化();
}
[测试]
公开无效测试()
{
使用(var session=DocumentStore.OpenSession())
{
存储(新父{Inner=new Child{Num=1});
session.SaveChanges();
}
使用(var session=DocumentStore.OpenSession())
{
var list=session.Query().Customize(x=>x.WaitForNonSalesultsAsOffow())
.其中(x=>x.Inner.Num==1)
.ToList();
Assert.That(list.Count,Is.EqualTo(1));
}
}
公共类父类
{
公共字符串Id{get;set;}
//如果你把这个评论出来,它会起作用的
[JsonProperty(“N”)]
公共子内部{get;set;}
}
公营儿童
{
[JsonProperty(“M”)]
公共int Num{get;set;}
}
}
}    
但是,如果我注释掉行
[JsonProperty(“N”)]
,它将按预期工作

这是一个错误还是我做错了什么


我使用的是RavenDB 2.5.0.0(最新版本)

这似乎是DocumentSession查询提供程序中的一个错误。如果查询提供程序不支持文档上的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));
        }
    }
[测试]
公开无效测试()
{
使用(var session=DocumentStore.OpenSession())
{
存储(新父{Inner=new Child{Num=1});
session.SaveChanges();
}
使用(var session=DocumentStore.OpenSession())
{
var list=session.Advanced.LuceneQuery()
.WhereEquals(x=>x.Inner.Num,1)
.ToList();
Assert.That(list.Count,Is.EqualTo(1));
}
}

谢谢Jay,不幸的是这对我不起作用。您使用的是哪个版本的RavenDB?奇怪的是,使用LuceneQuery会导致相同的行为。如果我注释掉
[JsonProperty(“N”)]
,它就会工作。我在构建2375上测试了它。我在构建2622和2601上测试了它,但它不工作。我很确定这是一个bug,并期待着在将来得到修复。
    [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));
        }
    }