无法使用C#中的UpdateDefinitionBuilder将列表保存到MongoDB

时间:2018-01-28 00:01:25

标签: c# mongodb mongodb-.net-driver

我有以下帮助函数,它使用反射来查看提供的模型,检查是否有任何字段为非null,并在MongoDB中覆盖那些具有新值的字段。

在我尝试更新List<string>字段之前,它可以正常工作。它不是将列表作为数组保存到MongoDB,而是在MongoDB中保存字符串值“(Collection)”。我缺少什么使这项工作?

我不想将任何List默认为List<string>的硬编码。我有可能拥有整体清单。

    public override MyObj Update(MyObj model)
    {
        var builder = Builders<MyObj>.Update;
        var builder_def = builder.Set(x => x.Id, model.Id);

        foreach (PropertyInfo prop in model.GetType().GetProperties())
        {
            var value = model.GetType().GetProperty(prop.Name).GetValue(model, null);

            if (value != null)
            {
                builder_def = builder_def.Set(prop.Name, value); // Not setting lists correctly
            }
        }

        var filter = Builders<MyObj>.Filter;
        var filter_def = filter.Eq(x => x.Id, model.Id);

        Connection.Update(filter_def, builder_def);

        return model;
    }

修改

我认为我的问题与此漏洞https://jira.mongodb.org/browse/CSHARP-1984有关。鉴于此,我有什么方法可以在这种背景下完成这项工作吗?

0 个答案:

没有答案