You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为MongoDB C#驱动的BsonMemberMap设置Setter属性?

如何为BsonMemberMap指定自定义Setter?

当然可以,MongoDB C#驱动支持为BsonMemberMap指定自定义Setter逻辑,核心是使用SetSetter方法替换默认的赋值行为。

实现示例

1. 注册ClassMap时指定Setter

在注册实体类的BsonClassMap阶段直接配置自定义Setter:

BsonClassMap.RegisterClassMap<YourEntity>(cm =>
{
    cm.AutoMap(); // 自动映射其他属性
    // 获取Items属性的成员映射
    var itemsMemberMap = cm.GetMemberMap(x => x.Items);
    // 设置自定义Setter逻辑
    itemsMemberMap.SetSetter((entity, value) =>
    {
        // 可添加自定义处理:类型转换、数据校验等
        var validItems = value as List<ItemModel> ?? new List<ItemModel>();
        // 过滤空项后赋值
        entity.Items = validItems.Where(item => item != null).ToList();
    });
});

2. 修改已注册的ClassMap

如果实体类的ClassMap已完成注册,可通过LookupClassMap获取后修改Setter:

var classMap = BsonClassMap.LookupClassMap<YourEntity>();
var itemsMemberMap = classMap.GetMemberMap("Items");
// 重写Setter逻辑
itemsMemberMap.SetSetter((entity, value) =>
{
    entity.Items = value is IEnumerable<ItemModel> items 
        ? new ObservableCollection<ItemModel>(items) 
        : new ObservableCollection<ItemModel>();
});

关键说明

  • SetSetter接收Action<TEntity, object>委托:第一个参数是实体实例,第二个是待设置的值,可在委托内完成任意自定义处理后再赋值给目标属性。
  • 需确保自定义Setter逻辑在MongoDB操作(查询、插入、更新等)执行前配置完成,避免运行时异常。

内容的提问来源于stack exchange,提问作者Oleg Ivsv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:05:14