Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

IsWriteable not working on Key columns

Open
#141 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
csharp, sql
Domain
backend, database

Research direction

Start with src/Dapper.Contrib/SqlMapperExtensions.cs at the linked line around 438 and reproduce the single-column table case using the C# model shown. Trace how key fields and IsWriteable fields are selected for updates, then establish expected behavior for an empty SET clause and key-column writes. Done means the behavior is defined and covered for this reported case.

Written by the indexing model from the issue text.

Description

So here I sit and switch from EF to Dapper because CodeFirst with several thousands of AddOrUpdate in Seed was getting a bit irritating when debugging thanks to our beloved Change Tracking... usual story of people switching to Dapper...

... and then I encountered this:

public class WhoInTarnationThoughtThatDozensOfTablesWithOneColumnIsGoodIdea
{
    [Key]
    [Dapper.Contrib.Extensions.ExplicitKey] //dapper fails to detect his as Key automatically :(
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [StringLength(250)]
    public string SomethingNotNamedIdToMakeMyDayWorse { get; set; }
}

So first issue was "Entity must have at least one [Key] or [ExplicitKey] property ", but there are already tickets for it and can be solved with that silly ExplicitKey attribute. No biggie. Build, start, make a tea while this overweight abomination of a project starts up and munches through hundred migrations... oh different exception.

System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'where'...

Here's the culprit:
https://github.com/DapperLib/Dapper.Contrib/blob/cf24f6bdc577b1e071c3764ddfb2cf3382531405/src/Dapper.Contrib/SqlMapperExtensions.cs#L438

(You won't get exception if you have non-key fields in table. Single-column table is a must.)

So there are 3 problems (aside of database design I got stuck with...):

  1. Key column detection sucks, but thats because Dapper isn't checking EF attributes and can be fixed with ExplicitKey attribute.
  2. Invalid SQL when there is no "non-id properties" as SET clause ends up empty. Would be nice to have explicit exception here instead of raw error.
  3. Due to offending line [IsWriteable(true)] is not working on Key columns like [DatabaseGenerated(DatabaseGeneratedOption.None)] does in EF, because all Key columns are excluded from list of updateable fields.

So I'd like to ask, before wasting half an hour to fix it, IsWriteable vs ExplicitKey a feature or a bug?

Dominant language
C#
Stars
294
Forks
108
PR merge metrics
No merged PRs in 30d

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

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.

More from DapperLib/Dapper.Contrib

All issues in DapperLib/Dapper.Contrib

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.