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
, Guid
nebo 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());