繁体   English   中英

MongoDB c#驱动程序:如何为类中的所有成员设置SetIgnoreIfDefault

[英]MongoDB c# Driver: How to set SetIgnoreIfDefault for all members in a class

我想为类的所有属性设置SetIgnoreIfDefault(true)。 (这可以将大量的默认数据保存在存储中)

我可以为每个属性显式调用SetIgnoreIfDefault:

    BsonClassMap.RegisterClassMap<MyClass>(cm =>
    {
        cm.AutoMap();
        cm.MapProperty(x => x.A).SetIgnoreIfDefault(true);
        cm.MapProperty(x => x.B).SetIgnoreIfDefault(true);
        cm.MapProperty(x => x.C).SetIgnoreIfDefault(true);
        cm.MapProperty(x => x.D).SetIgnoreIfDefault(true);
        cm.MapProperty(x => x.E).SetIgnoreIfDefault(true);
        ...
        cm.SetIgnoreExtraElements(true);
    });

但是,我有许多类和许多属性,如果我修改了这些类,则需要记住要更改注册。

有没有一种方法可以在一次调用中为类的所有属性设置它?

有没有一种方法可以全局设置所有属性?

谢谢

有没有一种方法可以在一次调用中为类的所有属性设置它?

有没有一种方法可以全局设置所有属性?

您可以使用自定义成员映射约定轻松实现此目的。

这是一个示例约定,它将忽略所有类的默认值属性:

public class IgnoreDefaultPropertiesConvention : IMemberMapConvention
{
    public string Name => "Ignore default properties for all classes";

    public void Apply(BsonMemberMap memberMap)
    {
        memberMap.SetIgnoreIfDefault(true);
    }
}

这是特定类的约定:

public class IgnoreDefaultPropertiesConvention<T> : IMemberMapConvention
{
    public string Name  => $"Ignore Default Properties for {typeof(T)}";

    public void Apply(BsonMemberMap memberMap)
    {
        if (typeof(T) == memberMap.ClassMap.ClassType)
        {
            memberMap.SetIgnoreIfDefault(true);
        }
    }
}

您可以通过以下方式注册自定义约定(在对MongoDB的任何请求之前):

var pack = new ConventionPack
{
    new IgnoreDefaultPropertiesConvention()
};
ConventionRegistry.Register("Custom Conventions", pack, t => true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM