Hugo Rocha
Hugo Rocha

Reputation: 537

C# Dapper QueryAsync to ValueTuple not mapping correctly

I'm doing the following query using dapper and C#7 ValueTuples (installed nuget):

await connection.QueryAsync<(int, Guid)>(
                $@"SELECT tenant, pid FROM Table 
                ORDER BY id
                OFFSET {skip} ROWS 
                FETCH NEXT {dbBatchSize} ROWS ONLY");

It returns a list of 0 and Guid.Empty.

If I use only int or only Guid it works ok

I also tried naming the ValueTuple according to the columns in the table:

await connection.QueryAsync<(int tenant, Guid pid)>("...")

Same result.

Anyone has any tip? Thanks in advance!

Upvotes: 4

Views: 2521

Answers (2)

plhrja
plhrja

Reputation: 81

Dapper seems to support ValueTuple query mappings since v.1.50.4, although the issue David Arno pointed out is still open. We've been utilizing this feature for a while in our projects.

I'm unable to find any mentions of added support in release notes either, but I managed to find an example usage of this feature in Dapper's test project.

Upvotes: 6

David Arno
David Arno

Reputation: 43254

This is a known limitation of dapper. It doesn't support copying a query result into a ValueTuple. There is an open issue on Github requesting support for this.

The OP of that request creating a working example of how it could be done in April and it is currently scheduled for the v2.0 release.

Upvotes: 8

Related Questions