У меня есть класс, у которого есть свойство enum. Свойство записывается в виде строки в базу данных при сохранении всего документа из-за атрибута в представлении. NET документа ниже
public enum Status { Good, Bad }
public class Document
{
[BsonRepresentation(BsonType.String)]
public Status Status { get; set; }
// ...
}
Позже, когда я хочу обновить значение в документе не сохраняя весь документ, я создаю фильтр следующим образом:
var builder = Builders<T>.Update;
var filter = builder.Set(new StringFieldDefinition<T, Status>(fieldName), (Status)value);
var result = await Context.Collection.UpdateManyAsync(filter, update);
К сожалению, это записывает целочисленное значение перечисления.
Если я изменю фильтр на этот
var filter = builder.Set(new StringFieldDefinition<T, Status>(fieldName), value.ToString());
Водитель выбросит InvalidCastException
. Как правильно построить фильтр? Есть ли другой способ установить значение перечисления напрямую, без замены документа?
Мне пришло в голову, что может быть способ связать поведение одного поля с атрибутом во всем документе, но я могу кажется, не выяснил, как это сделать.