Batasan dapper

Ada beberapa batasan yang harus Anda ketahui saat menggunakan Microsoft.Data.Sqlite dengan Dapper.

Parameter-parameternya

Nama parameter SQLite peka huruf besar/kecil. Pastikan bahwa nama parameter yang digunakan dalam SQL cocok dengan kasus properti objek anonim. Masalah #18861 akan meningkatkan pengalaman ini.

Dapper juga mengharapkan parameter untuk menggunakan awalan @ . Awalan lain tidak akan berfungsi.

var result = connection.ExecuteScalar(
    "SELECT @Value",
    new { Value = 1 });

Jenis data

Dapper membaca nilai menggunakan pengindeks SqliteDataReader. Jenis pengembalian pengindeks ini adalah objek, yang berarti hanya akan mengembalikan nilai panjang, ganda, string, atau byte[]. Untuk informasi selengkapnya, lihat Jenis data. Dapper menangani sebagian besar konversi antara ini dan jenis primitif lainnya. Sayangnya, itu tidak menangani DateTimeOffset, , Guidatau TimeSpan. Buat pengelola jenis jika Anda ingin menggunakan jenis ini dalam hasil Anda.

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);
}

Jangan lupa untuk menambahkan pengelola tipe sebelum melakukan kueri.

SqlMapper.AddTypeHandler(new DateTimeOffsetHandler());
SqlMapper.AddTypeHandler(new GuidHandler());
SqlMapper.AddTypeHandler(new TimeSpanHandler());

Lihat juga