Provide enhanced concurrency control

The existing concurrency control mechanisms in Aurelius are great but still can't allow for changes to different columns of the same record without also allowing a last-write-wins scenario.

I'd like to propose introducing an optional, alternative mechanism that allows for the merging of different changes to the same record. Using the entity versioning functionality as a basepoint: instead of requiring and maintaining a Version column and checking that it's current DB value still matches the value that was previously loaded, simply check that the DB values for the columns being changed still contain the values that were previously loaded.

I acknowledge that this is unlikely to be as bulletproof as the entity versioning mechanism out-of-the-box since such checks may be impractical for BLOB data, but an appropriately-designed system could mitigate this (e.g. - give each BLOB column it's own Version-like column) and greatly benefit by raising far fewer concurrency control exceptions.

This would also suppress potential "red-herring" exceptions where data was changed from A to B to A: the Version will have changed but the record is effectively the same before and after.

Hi Sean, this is an interesting approach but indeed, it puts a lot of burden into Aurelius shoulders. As you said, it's a complex mechanism that to work flawlessly 100% has to be well designed and takes effort from user (version columns for each BLOB field). I see you added a feature request for concurrency control (a different one), I'd suggest you add this one for voting. We are slowly putting the feature request system into highlight again, and it will be followed as soon all our plans and roadmap is migrated to it.

This is a complex implementation, so it needs time. Also, don't forget the fact that Aurelius only updates the modified fields is already a level of security to not override changes made by other users. It's enough for most use cases, the version mechanism is exactly intended for the cases where the whole record should be protected.