Dapper icon indicating copy to clipboard operation
Dapper copied to clipboard

TypeHandler not invoked on List Parameters

Open signax opened this issue 2 years ago • 1 comments

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.

signax avatar Oct 06 '23 15:10 signax

Might be relate to: https://github.com/DapperLib/Dapper/issues/1965

bmadzinski avatar Nov 06 '23 21:11 bmadzinski