Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При использовании Microsoft.Data.Sqlite с Dapper следует учитывать несколько ограничений.
Параметры
Имена параметров SQLite чувствительны к регистру. Убедитесь, что имена параметров, используемые в SQL, соответствуют регистру свойств анонимного объекта. Проблема No 18861 улучшит этот интерфейс.
Dapper также ожидает, что параметры будут использовать @
префикс. Другие префиксы не будут работать.
var result = connection.ExecuteScalar(
"SELECT @Value",
new { Value = 1 });
Типы данных
Dapper считывает значения с помощью индексатора SqliteDataReader. Возвращаемый тип этого индексатора — объект, который означает, что он будет возвращать только длинные, двойные, строковые или байтовые[] значения. Дополнительные сведения см. в разделе Типы данных. Dapper обрабатывает большинство преобразований между этими и другими примитивными типами. К сожалению, он не обрабатывает DateTimeOffset
, Guid
или TimeSpan
. Создайте обработчики типов, если вы хотите использовать эти типы в результатах.
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);
}
Не забудьте добавить обработчики типов перед запросом.
SqlMapper.AddTypeHandler(new DateTimeOffsetHandler());
SqlMapper.AddTypeHandler(new GuidHandler());
SqlMapper.AddTypeHandler(new TimeSpanHandler());