다음을 통해 공유


Dapper 제한 사항

Dapper와 함께 Microsoft.Data.Sqlite를 사용할 때 알아야 할 몇 가지 제한 사항이 있습니다.

매개 변수

SQLite 매개 변수 이름은 대/소문자를 구분합니다. SQL에 사용되는 매개 변수 이름이 익명 개체 속성의 경우와 일치하는지 확인합니다. 문제 #18861 이 이 환경을 향상시킵니다.

Dapper는 또한 매개 변수가 접두사를 @ 사용할 것으로 예상합니다. 다른 접두사는 작동하지 않습니다.

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

데이터 형식

Dapper는 SqliteDataReader 인덱서로 값을 읽습니다. 이 인덱서의 반환 형식은 개체입니다. 즉, long, double, string 또는 byte[] 값만 반환합니다. 자세한 내용은 데이터 형식을 참조하십시오. 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());

참고하십시오