Похоже, что определенные сборки драйвера не запустить BSON сериалайзера на обновлениях
https://github.com/mongodb/mongo-csharp-driver/blob/e455c963cb385b94fdcd02d1e53b536b47663239/src/MongoDB.Driver/MongoCollection.cs
public virtual WriteConcernResult Update(IMongoQuery query, IMongoUpdate update, MongoUpdateOptions options)
{
var updateBuilder = update as UpdateBuilder;
if (updateBuilder != null)
{
if (updateBuilder.Document.ElementCount == 0)
{
throw new ArgumentException("Update called with an empty UpdateBuilder that has no update operations.");
}
}
if (options == null)
{
throw new ArgumentNullException("options");
}
var queryDocument = query == null ? new BsonDocument() : query.ToBsonDocument();
var updateDocument = update.ToBsonDocument();
var messageEncoderSettings = GetMessageEncoderSettings();
var isMulti = options.Flags.HasFlag(UpdateFlags.Multi);
var isUpsert = options.Flags.HasFlag(UpdateFlags.Upsert);
var writeConcern = options.WriteConcern ?? _settings.WriteConcern ?? WriteConcern.Acknowledged;
var operation = new UpdateOpcodeOperation(_collectionNamespace, queryDocument, updateDocument, messageEncoderSettings)
{
IsMulti = isMulti,
IsUpsert = isUpsert,
WriteConcern = writeConcern
};
using (var binding = _server.GetWriteBinding())
{
return operation.Execute(binding, Timeout.InfiniteTimeSpan, CancellationToken.None);
}
}
Но случается при сохранении
public virtual WriteConcernResult Save(Type nominalType, object document, MongoInsertOptions options)
{
if (nominalType == null)
{
throw new ArgumentNullException("nominalType");
}
if (document == null)
{
throw new ArgumentNullException("document");
}
var serializer = BsonSerializer.LookupSerializer(document.GetType());
мне это действительно связано из того факта, что сериализатор, вероятно, должен иметь весь объект, а при выполнении обновления весь объект никогда не приходит к клиенту. Это, вероятно, ожидается. Ваши варианты:
- вручную сериализации tier.Price перед тем setWrapped
- Проверьте, чтобы увидеть, если другой вариант работы драйвера (может быть не стоит)
- Bug доклад MongoDB вопросов (информация на Github странице)
- Избегайте использования пользовательского сериализатора для десятичных типов (BSON изначально имеет двойные типы данных)