Dapper sınırlamaları

Microsoft.Data.Sqlite'i Dapper ile kullanırken bilmeniz gereken birkaç sınırlama vardır.

Parametreler

SQLite parametre adları büyük/küçük harfe duyarlıdır. SQL'de kullanılan parametre adlarının anonim nesnenin özellikleriyle eşleştiğinden emin olun. Sorun #18861 bu deneyimi geliştirecek.

Dapper ayrıca parametrelerin ön ekini @ kullanmasını bekler. Diğer ön ekler çalışmaz.

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

Veri türleri

Dapper, SqliteDataReader dizin oluşturucuyu kullanarak değerleri okur. Bu dizin oluşturucunun dönüş türü nesnedir; bu da yalnızca uzun, çift, dize veya bayt[] değerleri döndüreceği anlamına gelir. Daha fazla bilgi için bkz. Veri türleri. Dapper, bunlar ve diğer temel türler arasındaki dönüştürmelerin çoğunu işler. Ne yazık ki, DateTimeOffset, Guid veya TimeSpan'yi desteklemez. Sonuçlarınızda bu türleri kullanmak istiyorsanız tür işleyicileri oluşturun.

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

Sorgulamadan önce tür işleyicilerini eklemeyi unutmayın.

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

Ayrıca bakınız