Dapper
Dapper copied to clipboard
TypeHandler not invoked on List Parameters
Hi there,
I'm trying to use Dapper List Parameter with TypeHandler for Guid Management in Oracle ( represented as RAW(16) ) but it is not working as expected (Dapper version 2.1.4).
I'm using a GuidTypeHandler like the one generated by your AI support:
public class GuidTypeHandler : SqlMapper.TypeHandler<Guid>
{
public override Guid Parse(object value)
{
// Implement logic to parse the Guid value from the database
// For example:
if (value is byte[] bytes)
{
return new Guid(bytes);
}
throw new InvalidOperationException("Invalid Guid value");
}
public override void SetValue(IDbDataParameter parameter, Guid value)
{
// Implement logic to set the Guid value for the database parameter
// For example:
parameter.Value = value.ToByteArray();
parameter.DbType = DbType.Binary;
}
}
and I registered it as follows:
SqlMapper.AddTypeHandler(new GuidTypeHandler());
I have no problem with a single parameter such as
var res = conn.QuerySingle<Guid>("SELECT ID FROM TEST WHERE ID = :Id", new { Id = id });
but the type handler is not invoked like expected on List Parameters
var res = conn.Query<Guid>("SELECT ID FROM TEST WHERE ID IN :Ids", new { Ids = new List<Guid> { id1, id2 }}).ToList();
so I get the Oracle error Value does not fall within the expected range.
Might be relate to: https://github.com/DapperLib/Dapper/issues/1965