Ich habe eine Klasse namens AdviceId, die implizite Konvertierung zu / von Strings unterstützt. Ich habe auch die ToString () - Methode für die Klasse überschrieben, um sicherzustellen, dass die richtige Zeichenfolge ausgegeben wird, wenn diese Methode aufgerufen wird.
Meine Anwendung behält Daten mit Dapper bei. Zuvor wurden AdviceIds als Strings beibehalten und abgerufen, aber ich habe nun versucht, stattdessen den spezifischen Typ zu verwenden. Dies schlägt jedoch fehl. Gibt es einen speziellen Trick, um Dapper zu sagen, dass er eine implizite Konvertierung zwischen einer Zeichenfolge und meinem AdviceId-Typ verwenden soll?
UPDATE Ich habe es geschafft, Dapper dazu zu bringen, eine Instanz von AdviceId als String einzufügen, indem ich eine Type Map zum SqlMapper hinzufüge
SqlMapper.AddTypeMap(typeof(AdviceId), DbType.String);
und indem Sie AdviceId IConvertible implementieren. Ich hatte jedoch kein Glück, einen String von der db zurück in eine Instanz von AdviceId zu konvertieren.
Es sieht so aus, als ob Marc im Juni 2014 hinzugefügt wurde und Sie können AddTypeMap
mit Ihrer eigenen Implementierung von SqlMapper.TypeHandler<AdviceId>
die ich über diesen Blog gefunden habe, aber Marc hat auch hier SqlMapper.TypeHandler<AdviceId>
.
public class AdviceIdTypeHandler : SqlMapper.TypeHandler<AdviceId>
{
public override void SetValue(IDbDataParameter parameter, AdviceId value)
{
parameter.Value = value.ToString();
}
public override AdviceId Parse(object value)
{
return new AdviceId((string)value);
}
}
SqlMapper.AddTypeHandler(new AdviceIdTypeHandler());