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"));
});
为继承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
类映射到具有适当鉴别器的单个集合中。