簡體   English   中英

MongoDB .NET:映射繼承的通用屬性

[英]MongoDB .NET: Mapping inherited generic property

我有一個具有通用屬性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類映射到具有適當區分符的單個集合中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM