One solution is to ensure that the client delivers both the initially readable values and the updated values when saving. Then you do not need a copy of the original values in the session.
(DataRowVersion.Original DataRowVersion.Current), (, Contract:
SaveMyData(MyType original, MyType updated);
:
UPDATE MyTable
SET Col1 = @NewCol1, Col2 = @NewCol2, ...
WHERE Col1 = @OldCol1, Col2 = @OldCol2, ...
IF @@ROWCOUNT = 0 ... update failed ...
TIMESTAMP/ROWVERSION . :
UPDATE MyTable
SET Col1 = @NewCol1, Col2 = @NewCol2, ...
WHERE PKCol = @PK AND TimeStampCol = @OldTimeStamp
IF @@ROWCOUNT = 0 ... update failed ...
, , , / . - , .