.NET 中对所有类添加 IgnoreExtraElements 属性
在将 mongodb 中的数据映射到类的时候,当 mongodb
中的字段与定义的实体类的字段不一样时,会报错,此时只需要在类上添加
BsonIgnoreExtraElements
特性,即可解决。
正文
假设有如下 mongodb 数据:
1 | [ |
数据库对应的类的定义为:
1 | [ ] |
为了使 mongodb 在映射到 Person
时不报错,要在
Person
上添加 [BsonIgnoreExtraElements]
特性。
BsonIgnoreExtraElements 位于命名空间 MongoDB.Bson.Serialization.Attributes 中
这种方式有个弊端,如果要在每一个类上添加
[BsonIgnoreExtraElements]
,那写代码时简直难受,且代码侵入性很大。
有没有办法将 BsonIgnoreExtraElements
应用于所有的类呢?
当然有,其方法如下,只需要在初始化 MongoClient
之前运行一次如下代码即可。该设置是单例的,下次初始化时就不需要运行了。
1 | // mongodb 全局设置 |
ConventionPack 位于命名空间 MongoDB.Bson.Serialization.Conventions 中
IgnoreExtraElementsConvention:忽略库中有但是类中没有定义的字段。这个一般用于敏感字段处理,例如密码字段,它会存在用户 Collection 中,但是这个字段只是登录校验的时候会用到(这时可以用js来查询),其他用户查询(linq查询)基本都不需要用到密码字段。
IgnoreIfNullConvention:如果字段
null
,则不存这个字段,简单来说就是省空间,假设一个类中有A,B
两个字段,其中A
字段为空,如果指定该设置,存为{B:'B'}
,否则,存为{A:null, B:'B'}
。