Nest 6.2.0自参考循环

时间:2018-08-09 14:17:55

标签: c# elasticsearch nest

我正在使用Nest v6.2.0连接到弹性搜索。

当我尝试将A类型的文档添加到索引时,出现自引用循环错误,因为A类型的对象具有B类型的属性,而B类型具有A类型的属性。两个类型的对象A和B是数据库对象。

我可以在JsonParser上将ReferenceLoopHandling设置设置为ReferenceLoopHandling.Ignore,它可以很好地解析对象,但是我似乎无法将该json字符串发送给弹性搜索。那么,如何在Nest使用的Json解析器上设置相同的设置?这样我就可以将对象发送到弹性搜索,并且Nest可以正确解析对象,而不会出现自引用循环错误。

1 个答案:

答案 0 :(得分:1)

您可能希望使用其他更简单的POCO对要发送到Elasticsearch的文档进行建模,以避免通过自引用循环而潜在的大型对象图。

您可以引用Nest.JsonNetSerializer nuget packagehook up Json.NET as the serializer to use with NEST,并配置ReferenceLoopHandling属性

[Fact]
public void RequestIsVerifiable()
{

    //Arrange
    var wcfMock = new Mock<IService>();

    // wcfMock.Setup(x => x.EMCreateAsync(It.IsAny<EMCreateRequest>())).ReturnAsync(??);

    //Act
    var peProcessor = new PEProcessor(wcfMock.Object);
    peProcessor.CreateAddress(MoqData.ModelName, MoqData.version, MoqData.name,
        MoqData.MType, MoqData.AddressesList(), MoqData.EMRequest);

    //Assert
    wcfMock.Verify(service => service.EMCreateAsync(It.IsAny<EMCreateRequest>()), Times.AtLeastOnce);
}