2016-08-03 7 views
0

Ich habe eine generische Klasse Parameter mit einer allgemeinen Eigenschaft Value:MongoDB .NET: Mapping geerbt allgemeine Eigenschaft

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

StringParameter Klasse erbt die Parameter Klasse:

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

Ist es möglich, richtig zu kartieren die StringParameter Klasse, so dass es die generische Value Eigenschaft enthält?

Beim Versuch, die StringParameter Klasse mit dem folgenden Code (und verschiedenen anderen Ansätzen) zuzuordnen, das Beste, was ich tun konnte, ist eine Ausnahme mit der Nachricht: "Das MemberInfo Argument muss für die Klasse StringParameter sein, aber war für die Klasse Parameter` 1. "

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

Antwort

1

Mapping the Parameter Klasse mit dem angegebenen Typparameter für jede Unterklasse, die es erbt und dann scheint jede Unterklasse Automapping den Trick getan zu haben.

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>(); 

Beachten Sie, dass diese Karten alle Parameter Klassen in einer einzigen Sammlung mit entsprechenden Scheidern.

Verwandte Themen