public void SwapOriginalMediaWithVersion(MediaFile originalEntity, MediaFile newVersion, ISession session = null) { var swapEntity = newVersion.Clone(); if (session != null) { session.Evict(swapEntity); } // swap newVersion.CopyDataTo(swapEntity, false); originalEntity.CopyDataTo(newVersion, false); swapEntity.CopyDataTo(originalEntity, false); newVersion.Original = originalEntity; originalEntity.Categories = originalEntity.Categories ?? new List <MediaCategory>(); newVersion.Categories = newVersion.Categories ?? new List <MediaCategory>(); var catResult = SwapEntityCollections(originalEntity.Categories, newVersion.Categories, originalEntity, newVersion); originalEntity.Categories = catResult.Item1; newVersion.Categories = catResult.Item2; originalEntity.MediaTags = originalEntity.MediaTags ?? new List <MediaTag>(); newVersion.MediaTags = newVersion.MediaTags ?? new List <MediaTag>(); var tagResult = SwapEntityCollections(originalEntity.MediaTags, newVersion.MediaTags, originalEntity, newVersion); originalEntity.MediaTags = tagResult.Item1; newVersion.MediaTags = tagResult.Item2; }