zoukankan      html  css  js  c++  java
  • MongoDB 无法创建抽象类的问题,

     无法创建抽象类BsonClassMap.RegisterClassMap

    大家都知道抽象类是无法实例化的,即:不能new。

    在以下这些情况会遇到这种问题:

    1.基类是抽象类:

    2.基类是接口:

    由于mongodb的特性,在保存抽象类或接口的子类时,会自动映射一个字段"_t":即:子类名称;但是当读取的时候,必须创建子类的,但是由于不知道是那个子类,于是会创建基类的实例,由于基类是抽象类或接口,所以无法创建。

    解决方案啊如下:

    我们能遇到的总有人已经遇到过了,所以经常总结一下自己遇到的问题,方便后人,一代传一代。

    mongodb就已经为我们想到了:

    命名空间:MongoDB.Bson.Serialization;

    主要类:BsonClassMap;

    主要方法:RegisterClassMap;

     BsonClassMap.RegisterClassMap<T>();

    注意:

    当你无法确定T类型的时候可以如下做法:

      foreach (var type in types)
                {
                    bool isRegist = BsonClassMap.IsClassMapRegistered(type);
                    if (isRegist) continue;
                    BsonClassMap.RegisterClassMap(new ClassMap(type));
                }

    自定义一个类继承BsonClassMap

    主要是继承它的构造函数;

      public class ClassMap : BsonClassMap
        {
            public ClassMap(Type classType) : base(classType) { }
        }

    一个问题的解决方法不止一种,所以尝试用各种方式解决一道题,这样才会提升。

    欢迎各位提出更好的解决方案,谢谢!

  • 相关阅读:
    说说与线程相关的方法
    sleep()和yield()有什么区别?
    同步和异步有何异同,分别在什么情况下使用?
    如何保证多个线程同时启动?
    volatile关键字能否保证线程安全?
    使用对象的wait()方法需要注意什么?
    乐观锁与悲观锁是什么?
    Condition实现等待、唤醒
    LongAdder与AtomicLong有什么区别?
    介绍一下ForkJoinPool的使用
  • 原文地址:https://www.cnblogs.com/zlp520/p/3921435.html
Copyright © 2011-2022 走看看