         - force: If set to true, will save each model whether or not it returns true to `needsSync`. Use with care when doing this across the entire graph
      */
     public func sync(executor: Executor? = nil, force: Bool = false) throws {
+        try syncDelegate?.graphWillSync()
+
         var syncKeys = type(of: self).ModelSyncOrder
         for key in _store.keys { if !syncKeys.contains(key) { syncKeys.append(key) } }
         

import Vapor
import FluentProvider
import Foundation

open class Graph : GraphSynchronizable {
    /**

    
    private var _store : [String: GraphModelStore] = [:]
    public var context : Context = emptyContext
    public var syncDelegate : GraphSyncDelegate? = nil
    
    public func store<T>(forType: T.Type) -> GraphModelStore? where T : Entity {
        return _store[forType.entity]
