Partager via


Limitations de Dapper

Vous devez connaître quelques limitations lors de l’utilisation de Microsoft.Data.Sqlite avec Dapper.

Paramètres

Les noms de paramètres SQLite respectent la casse. Vérifiez que les noms de paramètres utilisés dans SQL correspondent au cas des propriétés de l’objet anonyme. Le problème n° 18861 améliorerait cette expérience.

Dapper s’attend également à ce que les paramètres utilisent le @ préfixe. Les autres préfixes ne fonctionnent pas.

var result = connection.ExecuteScalar(
    "SELECT @Value",
    new { Value = 1 });

Types de données

Dapper lit les valeurs à l’aide de l’indexeur SqliteDataReader. Le type de retour de cet indexeur est un objet, ce qui signifie qu’il ne retourne jamais de valeurs longues, doubles, chaînes ou octets[]. Pour plus d’informations, voir Types de données. Dapper gère la plupart des conversions entre ces types primitifs et d’autres types primitifs. Malheureusement, il ne gère DateTimeOffsetpas , Guidou TimeSpan. Créez des gestionnaires de types si vous souhaitez utiliser ces types dans vos résultats.

abstract class SqliteTypeHandler<T> : SqlMapper.TypeHandler<T>
{
    // Parameters are converted by Microsoft.Data.Sqlite
    public override void SetValue(IDbDataParameter parameter, T? value)
        => parameter.Value = value;
}

class DateTimeOffsetHandler : SqliteTypeHandler<DateTimeOffset>
{
    public override DateTimeOffset Parse(object value)
        => DateTimeOffset.Parse((string)value);
}

class GuidHandler : SqliteTypeHandler<Guid>
{
    public override Guid Parse(object value)
        => Guid.Parse((string)value);
}

class TimeSpanHandler : SqliteTypeHandler<TimeSpan>
{
    public override TimeSpan Parse(object value)
        => TimeSpan.Parse((string)value);
}

N’oubliez pas d’ajouter les gestionnaires de types avant l’interrogation.

SqlMapper.AddTypeHandler(new DateTimeOffsetHandler());
SqlMapper.AddTypeHandler(new GuidHandler());
SqlMapper.AddTypeHandler(new TimeSpanHandler());

Voir aussi