【发布时间】:2020-02-06 21:13:21
【问题描述】:
我有一个类,里面有一个枚举属性。保存整个文档时,该属性作为字符串写入数据库,因为下面文档的 .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。如何正确构建过滤器?有没有另一种方法可以直接设置枚举值而不替换文档?
我想到可能有一种方法可以将单字段行为与整个文档的属性相关联,但我似乎不知道如何做到这一点。
【问题讨论】:
标签: c# mongodb enums mongodb-.net-driver