Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Há algumas limitações que você deve estar ciente ao usar Microsoft.Data.Sqlite com Dapper.
Parâmetros
Os nomes dos parâmetros SQLite diferenciam maiúsculas de minúsculas. Verifique se os nomes de parâmetros usados no SQL correspondem ao caso das propriedades do objeto anônimo. A edição #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, strings ou byte[]. Para obter mais informações, consulte Tipos de dados. O Dapper lida com a maioria das conversões entre esses e outros tipos primitivos. Infelizmente, ele não lida com DateTimeOffset, Guidou TimeSpan. Crie manipuladores de tipo se 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());