DapperLib / DapperLib/Dapper

Confusing error message when setter is missing

Open
#1,237 2 comments 3 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
18.4k
Forks
3.7k
Avg merge
5h 8m
Merged PRs (30d)
1

Description

If you have a property in your dao like so

 int Prop { get; }

and you try to do a Query that maps to it, an exception is raised. This is fine.
The exception which is raised though is confusing:

System.ArgumentNullException: Value cannot be null.
Parameter name: meth
   at System.Reflection.Emit.DynamicILGenerator.Emit(OpCode opcode, MethodInfo meth)
   at Dapper.SqlMapper.GetTypeDeserializerImpl(Type type, IDataReader reader, Int32 startBound, Int32 length, Boolean returnNullIfFirstMissing) in SqlMapper.cs:line 3299
   at Dapper.SqlMapper.TypeDeserializerCache.GetReader(IDataReader reader, Int32 startBound, Int32 length, Boolean returnNullIfFirstMissing) in SqlMapper.TypeDeserializerCache.cs:line 153
   at Dapper.SqlMapper.TypeDeserializerCache.GetReader(Type type, IDataReader reader, Int32 startBound, Int32 length, Boolean returnNullIfFirstMissing) in SqlMapper.TypeDeserializerCache.cs:line 50
   at Dapper.SqlMapper.GetDeserializer(Type type, IDataReader reader, Int32 startBound, Int32 length, Boolean returnNullIfFirstMissing) in SqlMapper.cs:line 1787
   at Dapper.SqlMapper.QueryAsync[T](IDbConnection cnn, Type effectiveType, CommandDefinition command) in SqlMapper.Async.cs:line 427

Can we have something more useful?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at GetTypeDeserializerImpl in SqlMapper.cs:line 3299, where the stack trace shows the missing setter reaches DynamicILGenerator.Emit. Reproduce the Query mapping with a DAO property declared as int Prop { get; }, then make the failure identify the missing setter or mapped property instead of raising the confusing ArgumentNullException.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
databases
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.