     
     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]

        - 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 {
        var syncKeys = type(of: self).ModelSyncOrder
        for key in _store.keys { if !syncKeys.contains(key) { syncKeys.append(key) } }
        

import Vapor
import FluentProvider
import Foundation

/**
    Implements callbacks for the Graph sync lifecycle
 */
public protocol GraphSyncDelegate {
    func graphWillSync() throws
    func graphDidSync()
}

open class Graph : GraphSynchronizable {
    /**
