我有以下帮助函数,它使用反射来查看提供的模型,检查是否有任何字段为非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有关。鉴于此,我有什么方法可以在这种背景下完成这项工作吗?