Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Istnieje kilka ograniczeń, o których należy pamiętać podczas korzystania z Microsoft.Data.Sqlite z Dapper.
Parametry
Nazwy parametrów SQLite są rozróżniane pod względem wielkości liter. Upewnij się, że nazwy parametrów używane w SQL są zgodne z przypadkiem właściwości obiektu anonimowego. Problem nr 18861 poprawiłby to doświadczenie.
Program Dapper oczekuje również, że parametry będą używać prefiksu @
. Inne prefiksy nie będą działać.
var result = connection.ExecuteScalar(
"SELECT @Value",
new { Value = 1 });
Typy danych
Dapper odczytuje wartości przy użyciu indeksatora SqliteDataReader. Zwracany typ tego indeksatora to obiekt, co oznacza, że zwraca tylko wartości długie, podwójne, ciągowe lub bajtowe[]. Aby uzyskać więcej informacji, zobacz Typy danych. Dapper obsługuje większość konwersji między tymi i innymi typami prymitywnymi. Niestety nie obsługuje DateTimeOffset
, Guid
ani TimeSpan
. Utwórz programy obsługi typów, jeśli chcesz użyć tych typów w wynikach.
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);
}
Nie zapomnij dodać procedur obsługi typów przed wykonaniem zapytania.
SqlMapper.AddTypeHandler(new DateTimeOffsetHandler());
SqlMapper.AddTypeHandler(new GuidHandler());
SqlMapper.AddTypeHandler(new TimeSpanHandler());