Sdílet prostřednictvím


Omezení dapperu

Při používání Microsoft.Data.Sqlite s Dapperem byste měli mít na paměti několik omezení.

Parametry

V názvech parametrů SQLite se rozlišují malá a velká písmena. Ujistěte se, že názvy parametrů použité v SQL odpovídají případu vlastností anonymního objektu. Problém č. 18861 by toto prostředí zlepšil.

Dapper také očekává, že parametry použijí předponu @ . Jiné předpony nebudou fungovat.

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

Datové typy

Dapper čte hodnoty pomocí indexeru SqliteDataReader. Návratový typ tohoto indexeru je objekt, což znamená, že vrátí pouze dlouhé, dvojité, řetězcové nebo bajtové hodnoty[]. Další informace naleznete v tématu Datové typy. Dapper zpracovává většinu převodů mezi těmito a jinými primitivními typy. Bohužel to nezvládá DateTimeOffset, Guidnebo TimeSpan. Pokud chcete tyto typy ve výsledcích použít, vytvořte obslužné rutiny typů.

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

Před dotazováním nezapomeňte přidat obslužné rutiny typů.

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

Viz také