MongoDB .NET:映射继承的通用属性

时间:2016-08-03 11:30:10

标签: c# .net mongodb generics inheritance

我有一个通用类Parameter,其泛型属性为Value

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

StringParameter类继承Parameter类:

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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类映射到具有适当鉴别符的单个集合中。