Obtenir Dapper pour renvoyer une chaîne vide au lieu d'une chaîne vide

dapper

Question

Je sais que c'est un peu la mauvaise chose à faire, mais j'ai affaire à une base de code héritée qui a NULLS quand cela signifie des chaînes vides et vice versa.

Je ne peux pas voir immédiatement comment cela est possible, mais est-il possible d'obtenir (ou de modifier le dapper) pour qu'il retourne une chaîne vide au lieu d'une chaîne vide lors du retour de la base de données.

Réponse acceptée

Dapper n'appelle aucun setter quand il voit un null , donc les options peuvent inclure:

  • définir la valeur par défaut sur "" dans le constructeur
  • vérifier la valeur null dans l'accesseur

Alors:

public class SomeDto
{
    public SomeDto()
    {
        Name = "";
    }
    public string Name {get;set;}
}

ou:

public class SomeDto
{
    private string name;
    public string Name { get {return name ?? "";} set {name = value;} }
}

Cependant, cela ne s'applique qu'aux valeurs de lecture ; Je ne peux pas imaginer un bon moyen pour que Dapper devienne "" null quand on passe le dto en tant qu'objet de paramètre; les options incluent:

  • créer un type anon, en substituant "" à null (peut-être écrire une string NullIfBlank(this string s) méthode d'extension string NullIfBlank(this string s) )
  • avoir une propriété shim sur le type qui renvoie null à la place de "" et faire en sorte que votre requête de base de données soit @NameOrNull à @NameOrNull plutôt qu'à @Name

Réponse populaire

Vous pouvez contrôler cela avec vos requêtes, par exemple:

    public class Data
    {
        public string Foo { get; set; }
    }

    var result = conn.Query<Data>("select Foo = coalesce(Foo, '') from MyTable");

Ainsi, dans l'exemple ci-dessus, la coalescence renvoie une chaîne vide lorsque Foo est nul.




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