I’d like to know what is the best practice to track and/or persist changes over time if I use EF. I’d like to get started with EF for a new project. What I need is a kind of change history.
That’s how I did it before: If a record was created it was saved with an ID and with the same ID as InvariantID. If the record was updated i marked it as deleted and created a new record with the new values and a new ID but the same InvariantID. Like this I always had my current record but a history of changes as well.
This works perfectly fine for my scenarios. The amount of historical records is not an issue because I use this usually only for data that’s not changing very often.
Is this build in EF somehow or what’s the best way to get this behavior for EF?
No it is not build into EF and it will not work this way. I even don’t think that it is a good approach on the database level because it makes referential integrity very complex.
With EF this will work only if you use following approach:
IsDeleted = 0. It will ensure that only non deleted entities will be used in queries.IsDeleted = 1instead of really deleting the recordDeleteObjectto delete your record and after that you will insert new record – the reason is that EF is not able to deal with scenario where entity change its PK value during update.