Skip to content

Dapper maps when all columns listed, but not with * for select list #2023

@Crisfole

Description

@Crisfole

I really don't know why this happens, but Dapper is having trouble mapping columns with underscore matching enabled, but only when I use SELECT * or SELECT alias.* in my SQL.

The following class:

public record TableExample(
  Guid ExampleUuid,
  int SecretId,
  string Name,
  DateTime ValidStart,
  DateTime? ValidEnd
);

Does not work for this sql:

select tbl.* from TableExamples

But does work for this sql:

select example_uuid, secret_id, name, valid_start, valid_end from TableExample

The error is complaining (barely paraphrased because my console scrolled past my history limit):

an empty constructor or a constructor matching (System.Guid example_uuid, System.Int32 secret_id, System.String name, System.DateTime valid_start, System.DateTime valid_end) is required for Parking.API.Integrations.OdeVehicle materialization.

I can't really figure out how to debug this. I only managed to figure out the workaround by manually mapping in the query with Pascale case columns, and then deleting half at a time in search for the failure to map. The DateTime? doesn't seem to be it because it works.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions