Change Dapper pour qu'il mappe une valeur null de base de données sur double.NaN

.net ado.net dapper sqlite

Question

J'ai une double colonne nullable dans ma base de données SQLite.

Lors de la lecture de la base de données (pour les colonnes de type double), je voudrais convertir les valeurs null en "double.NaN".

Actuellement, dapper définit les valeurs nulles sur 0, ce que je ne veux pas.

Quelles sont mes options?

  1. Modifiez le code source de Dapper.
  2. Vous ne pouvez pas utiliser Dapper, vous devez écrire mon propre code ADO.NET à l'ancienne?
  3. changer la façon dont j'appelle la méthode cnn.Query, pour modifier la façon dont le mappage se produit.

Mon premier choix est l'option 1, mais j'ai besoin d'aide pour modifier Dapper.

Réponse acceptée

Personnellement, je déconseillerai ceci; un null n'est pas tout à fait la même chose que NaN. Si vous voulez vraiment faire cela, vous devrez regarder GetTypeDeserializer . Le code à faire est généré dynamiquement à l'aide d' ILGenerator et est assez complexe. Si vous cherchez une ligne:

il.MarkLabel(isDbNullLabel); // incoming stack: [target][target][value]

c'est là que le code se branche si un DbNull est détecté. Ce qu'il fait actuellement, c'est simplement sortir les deux valeurs (la valeur et la cible) de la pile, les déposer sur le sol et continuer. Vous devez vérifier la float de float / double tant que cas particulier, appliquer votre conversion, puis attribuer le NaN au membre.

Je répète ma revendication, cependant, que ce n'est tout simplement pas une chose valable à faire. Une option beaucoup plus simple serait:

public double? Value {get;set;}

ce qui nécessite aucun changement, et fonctionnera actuellement. Si vous voulez vraiment le traiter comme un double non nullable, peut-être:

private double foo = double.NaN;
public double Foo { get { return foo; } set { foo = value; } }

Cela va maintenant par défaut à NaN et se matérialiser correctement quand il y a des valeurs.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi