
[英]How to use “All” for an array property in a class using MongoDB C# Driver?
[英]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.