当我们尝试将对象保存到 MongoDB 时,我们得到了
System.InvalidCastException
。该错误是偶发的,但也毫无意义。错误信息是:
无法将“MongoDB.Bson.BsonObjectId”类型的对象转换为“MongoDB.Bson.BsonBoolean”类型。
据我在代码中所知,我们并没有尝试将对象 Id 转换为布尔值。 我们的更新代码是这样的:
foreach (var update in updates)
{
update.UpdateVersionNumber();
var updateFilterDef = Builders<AmazonOrder>.Filter;
var updateFilter = updateFilterDef.Eq(o => o.Id, update.Id) &
(updateFilterDef.Eq(o => o.Version, update.LoadedVersion) |
updateFilterDef.Exists(o => o.Version, false));
list.Add(new ReplaceOneModel<AmazonOrder>(updateFilter, update));
}
然后我们只需调用:
var result = await _context.Orders.BulkWriteAsync(list, cancellationToken: cancellationToken);
我们拥有的堆栈跟踪是:
bool AsBooleanGetter(object)
Called from: JsonPropertyInfoOfT.cs in bool JsonPropertyInfo<T>.GetMemberAndWriteJson(object obj, ref WriteStack state, Utf8JsonWriter writer)
什么会导致这个问题?
在插入数据库之前,将整个虚拟机转换为“ToBsonDocument()”并保存。