c# mongodb drive IngoreExtraElements and RegisterClassMap
private static void RegisterClassMaps(IEnumerable<Type> clrTypes)
{
foreach (var clrType in clrTypes)
{
if (clrTypes.Any(x => x.BaseType.Name == clrType.Name))
{
var genericSetIsRootClassMethod = MongoDBDataServiceFactorySetIsRootClassMethod.MakeGenericMethod(clrType);
var genericBsonClassMap = typeof(BsonClassMap<>).MakeGenericType(clrType);
var actionT = typeof(Action<>).MakeGenericType(genericBsonClassMap);
var @delegate = Delegate.CreateDelegate(actionT, genericSetIsRootClassMethod); RegisterClassMapWithExpressionMethod.MakeGenericMethod(clrType).Invoke(typeof(BsonClassMap), new object[] { @delegate });
}
else
{
RegisterClassMapWithoutExpressionMethod.MakeGenericMethod(clrType).Invoke(typeof(BsonClassMap), new object[] { });
}
}
} private static void SetIsRootClass<T>(BsonClassMap<T> map)
{
map.SetIsRootClass(true);
} // 忽略未绑定字段, 例如 mongodb 自带的 _id,否则查询时反序列化会报错,提示在 type 中找不到 _id 字段
private static void IgnoreExtraElements()
{
var pack = new ConventionPack
{
new IgnoreExtraElementsConvention(true)
};
ConventionRegistry.Register("My Solution Conventions", pack, t => true);
} private static readonly MethodInfo RegisterClassMapWithExpressionMethod = typeof(BsonClassMap).GetMethods().Where(x => x.Name == nameof(BsonClassMap.RegisterClassMap)).ToList()[];
private static readonly MethodInfo RegisterClassMapWithoutExpressionMethod = typeof(BsonClassMap).GetMethods().First(x => x.Name == nameof(BsonClassMap.RegisterClassMap));
private static readonly MethodInfo MongoDBDataServiceFactorySetIsRootClassMethod = typeof(MongoDBDataServiceFactory).GetMethod(nameof(MongoDBDataServiceFactory.SetIsRootClass), BindingFlags.NonPublic | BindingFlags.Static);
c# mongodb drive IngoreExtraElements and RegisterClassMap的更多相关文章
- MongoDB 安装(Window/Linux)
MongoDB安装在Windows上 在 Windows上,首先要安装 MongoDB下载最新发布的MongoDB: http://www.mongodb.org/downloads 确保得到正确的版 ...
- Data Base MongoDB 无法创建抽象类的问题,
无法创建抽象类BsonClassMap.RegisterClassMap 大家都知道抽象类是无法实例化的,即:不能new. 在以下这些情况会遇到这种问题: 1.基类是抽象类: 2.基类是接口: 由于 ...
- 集算器协助java处理多样性数据源之MongoDB
MongoDB不支持join,其官网上推荐的unity jdbc可以把数据取出来进行二次计算实现join运算,但这些join.group.函数.表达式等高级功能都是收费版才有,而且即使是收费版本,对子 ...
- MongoDB (三) MongoDB 安装
MongoDB安装在Windows上 在 Windows上,首先要安装 MongoDB下载最新发布的MongoDB: http://www.mongodb.org/downloads 确保得到正确的版 ...
- MongoDB Long/Int(长整型)的自增长主键 解决方案
今朝有幸尝芒果,发现自增长ID类型有多种,唯独没有Long/Int. 一思路:1. 自建一个Collection(表,假设名为:IdentityEntity,其中字段:_id, Key, Value, ...
- MongoDB学习(翻译5)
C#驱动序列化文档对象 介绍 本文档基于C#官方驱动1.8版本. 本节C#驱动教程谈论C#类到BSON对象的序列化和反序列化.序列化是映射一个对象到可保存到MongoDB库中BSON对象的过程,反序列 ...
- 每篇半小时1天入门MongoDB——2.MongoDB环境变量配置和Shell操作
上一篇:每篇半小时1天入门MongoDB——1.MongoDB介绍和安装 配置环境变量 Win10系统为例 右键单击“此电脑”——属性——高级系统设置——高级——环境变量,添加C:\Program F ...
- MongoDB安装与配置
参考文档:MongoDB官方文档 版本:3.6.4 从版本3.6开始,MongoDB需要Windows Server 2008 R2,Windows 7或更高版本. 第一步,在下载中心下载最新版本的M ...
- MongoDB十二种最有效的模式设计【转】
持续关注MongoDB博客(https://www.mongodb.com/blog)的同学一定会留意到,技术大牛Daniel Coupal 和 Ken W. Alger ,从 今年 2月17 号开始 ...
随机推荐
- Python中的锁
一.全局解释器锁(GIL) 1.什么是全局解释器锁 在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限,那么其他的线程就必须等待该线程的全局解释器(cpu)使用权消失后才能使用全局解释器 ...
- redis 3.2 新数据结构:quicklist、String的embstr与raw编码方式分界点
Redis3.2.0引入了新的quicklist的数据结构做了list的底层存储方案.废弃了原来的两个配置参数, list-max-ziplist-entries list-max-ziplist-v ...
- spring 数据库多数据源路由
项目中需要根据不同业务进行分库,首先是将业务不同业务映射到不同过的数据库( biz --> db,可能存在多对一情况), 查看springjdbc源码发现AbstractRoutingDataS ...
- 《linux就该这么学》第十四节课:第13章,部署DNS域名解析服务(bind服务)
(借鉴请改动) 第十二章收尾 12.2.nfs网络文件系统 RHEL7默认安装了nfs,配置文件在 /etc/export 写入格式:共享目录 允许的客户端(参数) ro ...
- 感觉不错的随笔 关于C、C++的
[effective C++的网页版] http://www.kuqin.com/effectivec2e/ 内存四区模型 https://www.cnblogs.com/crazyzhang/p/5 ...
- Docker 共有 13 个管理命令和 41 个通用命令,以下是常用 Docker 命令列表
开发人员一直在努力提高 Docker 的使用率和性能,命令也在不停变化.Docker 命令经常被弃用,或被替换为更新且更有效的命令,本文总结了近年来资深专家最常用的命令列表并给出部分使用方法. 目前, ...
- [Chrome] chrome 自动跳转到https
关键字眼: - static_upgrade_mode: FORCE_HTTPS - You cannot visit www.xxx.dev right now because the websit ...
- 缺陷的背后---LIMIT M,N 分页查找
一.问题发现篇 最近组内做了一次典型缺陷分享时,翻阅2018年的缺陷,找到了一个让我觉得“有料”的bug(别的同事测试发现的),先大致简单的描述下这个问题: 需要实现的功能:从一个DB库同步某一段时间 ...
- Scala环境搭建及Intellij IDEA安装
1.JDK官网地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Scala ...
- CentOS6.5 切换 图形界面 与 命令行界面
CentOS6.5 切换图形界面与命令行界面 [1]场景1:图形界面 -> 命令行界面 方式一(快捷键):Ctrl + Alt + F2 方式二(终端命令):init 3 (PS:init与3之 ...