zoukankan      html  css  js  c++  java
  • 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()[1];
            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);
  • 相关阅读:
    Spring 基础知识
    AJAX 基础知识
    Struts2 基础知识
    数据库——视图
    JAVA常见的集合类知识
    jsp同一应用中页面间传值方式
    mongodb 设置数据库管理员登录权限
    java freemark生成word文档
    java 多个文件打包zip
    easyui form提交文件(上传图片和文件)
  • 原文地址:https://www.cnblogs.com/myesn/p/csharp-mongodb-ingore-and-register.html
Copyright © 2011-2022 走看看