When creating a database to make use of MVCC (Multi-Version Concurrency Control), you create tables with whether boolean area like "IsLatest" or perhaps an integer "VersionId", and also you never inflict updates, you simply place new records when things change.
MVCC provides you with automatic auditing for programs that need an in depth history, and in addition it relieves pressure around the database in relation to update locks. The cons are it makes your computer data size larger and slows lower chooses, because of the additional clause necessary to obtain the latest version. Additionally, it makes foreign secrets more difficult.
(Observe that I am not speaking concerning the native MVCC support in RDBMSs like SQL Server's snapshot isolation level)
It has been talked about in other posts here on Stack Overflow. [todo - links]
I'm wondering, which from the prevalent entity/ORM frameworks (Linq to Sql, ADO.Internet EF, Hibernate, etc) can cleanly support this kind of design? This can be a major switch to the normal ActiveRecord design pattern, so I am unsure if nearly all tools which are available may help somebody that decides to follow this path using their data model. I am particularly thinking about how foreign secrets could be handled, because I am not really certain of the easiest method to data model these to support MVCC.
I would consider applying the MVCC tier purely within the DB, using saved procs and sights to deal with my data procedures. Then you may present an acceptable API to the ORM which was able to mapping back and forth from saved procs, and also you could allow the DB cope with the information integrity issues (becasue it is virtually build for your). Should you went by doing this, you might like to consider a more pure Mapping solution like IBatis or IBatis.internet.