Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Er zijn enkele beperkingen waarmee u rekening moet houden bij het gebruik van Microsoft.Data.Sqlite met Dapper.
Parameterwaarden
SQLite-parameternamen zijn hoofdlettergevoelig. Zorg ervoor dat de parameternamen die worden gebruikt in SQL overeenkomen met het geval van de eigenschappen van het anonieme object. Issue 18861 zou deze ervaring verbeteren.
Dapper verwacht ook dat parameters het @
voorvoegsel gebruiken. Andere voorvoegsels werken niet.
var result = connection.ExecuteScalar(
"SELECT @Value",
new { Value = 1 });
Gegevenstypen
Dapper leest waarden met behulp van de indexeerfunctie sqliteDataReader. Het retourtype van deze indexeerfunctie is een object, wat betekent dat het alleen lange, dubbele, tekenreeks- of byte[]-waarden retourneert. Zie Gegevenstypen voor meer informatie. Dapper verwerkt de meeste conversies tussen deze en andere primitieve typen. Helaas, het verwerkt DateTimeOffset
, Guid
of TimeSpan
niet. Maak typehandlers als u deze typen in uw resultaten wilt gebruiken.
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);
}
Vergeet niet om de typehandlers toe te voegen voordat u een query uitvoert.
SqlMapper.AddTypeHandler(new DateTimeOffsetHandler());
SqlMapper.AddTypeHandler(new GuidHandler());
SqlMapper.AddTypeHandler(new TimeSpanHandler());