     
 }
 
+/// The root saving context.
 private class RootSavingDataContext: DataContext {
     
     private static let savedChildContextUserInfoKey = "com.alecrim.AlecrimCoreData.DataContext.SavedChildContext"

    
    // MARK: - public convenience methods
    
    public func perform(closure: () -> Void) {
        self.performBlock(closure)
    }
    
    public func performAndWait(closure: () -> Void) {
        self.performBlockAndWait(closure)
    }

    
    // MARK: - public overrided methods
    
    /// Attempts to commit unsaved changes to registered entities (objects) to the receiver’s parent store.
    ///
    /// - discussion: Unlike the default behavior of `NSManagedObjectContext`, this method actually propagates
    ///               the changes to the parent context that will try to do the same until the root saving context is reached.
    ///               When and if the root saving context is reached the changes will be merged into its child contexts
    ///               with the exception of the context that originated the saving process.
    ///
    /// - note: If the context does not have changes this method does nothing.
    public override func save() throws {
        guard self.hasChanges else { return }
        
