Dapper-Extensions icon indicating copy to clipboard operation
Dapper-Extensions copied to clipboard

Add predicate to Update

Open paynecrl97 opened this issue 1 year ago • 0 comments

Before I go ahead and add unit tests etc, I'd like to check that you'd accept a contribution like this: https://github.com/tmsmith/Dapper-Extensions/compare/master...paynecrl97:Dapper-Extensions:predicateUpdate?expand=1

It basically adds an Upload overload to accept a predicate to allow for updating records based on something other than their key: Task<bool> UpdateAsync<T>(this IDbConnection connection, T entity, object predicate, IDbTransaction transaction = null, int? commandTimeout = null, bool ignoreAllKeyProperties = true)

The primary use case would be when you don't know the database key for a record that you want to update, but you do know some other unique identifier (for example if you're consuming from an external system and the external system includes a unique value etc).

This could be used as a building block for an upsert operation, or it could be extended to PartialUpdate to allow for bulk updating rows (eg set IsOverdue = true where PaymentDueDate < Today).

Things to note:

  • ignoreAllKeyProperties is defaulted to true (the assumption being that you don't know the keys, so you don't want to change them)
  • The return type is bool (in line with the other update methods), but I think it would be better to be an int in case you want to know how many records were updated

paynecrl97 avatar Apr 25 '23 11:04 paynecrl97