tmsmith / Dapper-Extensions

Dapper Extensions is a small library that complements Dapper by adding basic CRUD operations (Get, Insert, Update, Delete) for your POCOs. For more advanced querying scenarios, Dapper Extensions provides a predicate system. The goal of this library is to keep your POCOs pure by not requiring any attributes or base class inheritance.
1.79k stars 584 forks source link

Add predicate to Update #318

Open paynecrl97 opened 1 year ago

paynecrl97 commented 1 year ago

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: