Skip to content

Problem with DateOnly mapping when updating form v2.1.35 to 2.1.44 #2071

@glebron-woffu

Description

@glebron-woffu

I used to have this custom type handler configured:
SqlMapper.AddTypeHandler(new DapperSqlDateOnlyTypeHandler());

Mapping class is:

public class DapperSqlDateOnlyTypeHandler : SqlMapper.TypeHandler<DateOnly>
{
    public override void SetValue(IDbDataParameter parameter, DateOnly date)
        => parameter.Value = date.ToDateTime(new TimeOnly(0, 0));

    public override DateOnly Parse(object value)
        => DateOnly.FromDateTime((DateTime)value);
}

This was working fine, but looks like the DateOnly support was added in 2.1.37 but
Now I am getting this error:

System.Data.DataException
Error parsing column 1 (Date=669745 - Int32)
   at Dapper.SqlMapper.ThrowDataException(Exception ex, Int32 index, IDataReader reader, Object value) in /_/Dapper/SqlMapper.cs:line 3948
Inner exception:
InvalidCastException: Unable to cast object of type 'System.DateTime' to type 'System.DateOnly'.

Thing is, the Date column is column 1, but somehow is parsing column 0 value
Query result:
669745 2023-11-01 NULL NULL ...

So I am a bit confused, in v2.1.35 I didn't have this problem. I removed custom mapper SqlMapper.AddTypeHandler(new DapperSqlDateOnlyTypeHandler()); and still same problem.
Edit:
In another query, I set date only field as first one:
2023-11-01 0 0
The error is:

System.Data.DataException
Error parsing column 0 (Date=n/a - Unable to cast object of type 'System.DateTime' to type 'System.DateOnly'.)
   at Dapper.SqlMapper.ThrowDataException(Exception ex, Int32 index, IDataReader reader, Object value) in /_/Dapper/SqlMapper.cs:line 3948
   at Deserialize68929759-6271-4665-a68e-ff25a40601eb(DbDataReader)
   at Dapper.SqlMapper.QueryAsync[T](IDbConnection cnn, Type effectiveType, CommandDefinition command)

The class is:


public record TestClass
{
    public DateOnly Date { get; set; }
    public int First { get; set; }
    public int Second { get; set; }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions