MongoDB.NET:映射继承了泛型属性

本文关键字:泛型 属性 继承 映射 NET MongoDB | 更新日期: 2023-09-27 17:59:52

我有一个具有泛型属性Value:的泛型类Parameter

abstract class Parameter<T> {
    public T Value { get; set; }
}

StringParameter类继承Parameter类:

class StringParameter : Parameter<string> {
    //...
}

是否可以正确映射StringParameter类,使其包含通用Value属性?

当尝试用下面的代码(以及各种其他方法)映射StringParameter类时,我能做的最好的事情就是得到一个异常消息:"memberInfo参数必须用于类StringParameter,但用于类Parameter`1。"

BsonClassMap.RegisterClassMap<StringParameter>(cm => {
    cm.AutoMap();
    cm.MapMember(typeof(StringParameter).GetRuntimeProperty("Value"));
});

MongoDB.NET:映射继承了泛型属性

为继承Parameter类的每个子类映射指定的类型参数,然后自动映射每个子类似乎已经完成了任务。

BsonClassMap.RegisterClassMap<Parameter<string>>(cm => {
    cm.AutoMap();
    cm.MapProperty("Value");
});
BsonClassMap.RegisterClassMap<Parameter<DateTime>>(cm => {
    cm.AutoMap();
    cm.MapProperty("Value");
});
BsonClassMap.RegisterClassMap<Parameter<int>>(cm => {
    cm.AutoMap();
    cm.MapProperty("Value");
});
BsonClassMap.RegisterClassMap<Parameter<decimal>>(cm => {
    cm.AutoMap();
    cm.MapProperty("Value");
});
BsonClassMap.RegisterClassMap<StringParameter>();
BsonClassMap.RegisterClassMap<DateParameter>();
BsonClassMap.RegisterClassMap<IntegerParameter>();
BsonClassMap.RegisterClassMap<DecimalParameter>();

请注意,这将所有Parameter类映射到具有适当鉴别器的单个集合中。