-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Open
Description
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; }
}
rob-baldwin, haskovec, hulkbulgur, petrushenko and webluke
Metadata
Metadata
Assignees
Labels
No labels