2016-08-03 82 views
0

我有一個泛型類Parameter具有通用性質ValueMongoDB的.NET:映射繼承通用屬性

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")); 
}); 

回答

1

映射的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類映射到適當的鑑別單個集合。