Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Há algumas limitações que você deve estar ciente ao usar Microsoft.Data.Sqlite com o Dapper.
Parâmetros
Os nomes de parâmetro SQLite diferenciam maiúsculas de minúsculas. Verifique se os nomes de parâmetro usados no SQL correspondem ao caso das propriedades do objeto anônimo. O problema nº 18861 melhoraria essa experiência.
O Dapper também espera que os parâmetros usem o @
prefixo. Outros prefixos não funcionarão.
var result = connection.ExecuteScalar(
"SELECT @Value",
new { Value = 1 });
Tipos de dados
O Dapper lê valores usando o indexador SqliteDataReader. O tipo de retorno desse indexador é objeto, o que significa que ele só retornará valores longos, duplos, de cadeia de caracteres ou de bytes[]. Para obter mais informações, consulte Tipos de dados. O Dapper manipula a maioria das conversões entre esses e outros tipos primitivos. Infelizmente, ele não manipula DateTimeOffset
, Guid
ou TimeSpan
. Crie manipuladores de tipo se você quiser usar esses tipos em seus resultados.
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ão se esqueça de adicionar os manipuladores de tipo antes de consultar.
SqlMapper.AddTypeHandler(new DateTimeOffsetHandler());
SqlMapper.AddTypeHandler(new GuidHandler());
SqlMapper.AddTypeHandler(new TimeSpanHandler());