共用方式為


Dapper 限制

使用 Microsoft.Data.Sqlite 搭配 Dapper 時,您應該注意一些限制。

參數

SQLite 參數名稱會區分大小寫。 請確定 SQL 中使用的參數名稱符合匿名物件屬性的案例。 問題 #18861 可改善此體驗。

Dapper 也預期參數會使用 @ 前置詞。 其他前綴將無效。

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

數據類型

Dapper 會使用 SqliteDataReader 索引器讀取值。 這個索引器傳回型別是 物件,這表示它只會傳回 long、double、string 或 byte[] 值。 如需更多資訊,請見 資料類型。 Dapper 會處理這些和其他基本類型之間的大部分轉換。 不幸的是,它不會處理 DateTimeOffsetGuidTimeSpan。 如果您想要在結果中使用這些類型,請建立類型處理程式。

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

另請參閱