ChangeSetContainer CreateChangeSet(bool acceptChanges) { ChangeSetContainer csc = new ChangeSetContainer(); var addedObjects = new List <IPersistenceCapable>(); var deletedObjects = new List <ObjectId>(); var changedObjects = new List <IPersistenceCapable>(); foreach (var cacheEntry in cache.LockedObjects) { IPersistenceCapable pc = cacheEntry.pc; if (pc.NDOObjectState == NDOObjectState.Created) { addedObjects.Add(pc); if (acceptChanges) { pc.NDOObjectState = NDOObjectState.Persistent; } } else if (pc.NDOObjectState == NDOObjectState.Deleted) { deletedObjects.Add(pc.NDOObjectId); if (acceptChanges) { pc.NDOObjectState = NDOObjectState.Transient; } } else if (pc.NDOObjectState == NDOObjectState.PersistentDirty) { changedObjects.Add(pc); if (acceptChanges) { pc.NDOObjectState = NDOObjectState.Persistent; } } } csc.RelationChanges = RelationChanges.ToList(); csc.ChangedObjects = changedObjects; csc.AddedObjects = addedObjects; csc.DeletedObjects = deletedObjects; if (acceptChanges) { cache.UnlockAll(); RelationChanges.Clear(); } return(csc); }
/// <summary> /// Gets a serializable container, which contains all changes made to objects and relations. /// Serialization will be in binary format. /// </summary> /// <param name="acceptChanges"> /// If true, a subsequent call to GetChangeSet would return an empty ChangeSetContainer. /// If false, a subsequent call to GetChangeSet would return the same ChangeSetContainer. /// <seealso cref="NDO.ChangeSetContainer"/> /// </param> /// <returns>A ChangeSetContainer object.</returns> public virtual ChangeSetContainer GetChangeSet(bool acceptChanges) { ChangeSetContainer csc = CreateChangeSet(acceptChanges); return(csc); }