There is no issue using your own transactions. Unit of work is a container that you add things to. When you commit the unit of work, it sorts out the proper order for inserts, updates, and deletes and wraps them into a transaction for you.
The reason that I wrote the code as i did was because I was assuming this:
Before the execution of the code, you have some entity in a table, and this entity is the current version. Lets say the entity is a name entity, and also lets assume the record looks like this:
NameId,VersionId,FirstName,LastName
501,999999,Joe,Bloggs
Now, I also assumet that you want to change this name, and at the same time keep the old version in the table. I think my code would update record 501, and create a new entity. So lets say that you change Joe to John, the data in the table should look like this.....
NameId,VersionId,FirstName,LastName
501,85,Joe,Bloggs
502,999999,John,Bloggs
85 is the next version # (i just picked an arbitrary number).
So now, I assumed that if you change the last name of the current version to Smith, your data in your table would look like this:
NameId,VersionId,FirstName,LastName
501,85,Joe,Bloggs
502,86,John,Bloggs
503,999999,John,Smith
Also, regarding multiple calls, to NewVersion, this simply copies the data from the fetched head entity into a new entity and returns the new entity. The old version is just a copy of the existing data, except for the version number, so I call into the NewVersion method and set the version number to the next version number. I use the entity returned from oldVersion to update the existing row in the db and I create a new data row using the entity returned from newVersion.
It is possible that I dont fully understand what you are trying to implement.