                 }
                 else {
                     
-                    guard T.shouldInsert(from: source, in: self) else {
+                    guard entityType.shouldInsert(from: source, in: self) else {
                         
                         return nil
                     }

                mapping = try autoreleasepool { try preProcess(mapping) }
                
                var objects = Dictionary<T.UniqueIDType, T>()
                for object in self.fetchAll(From<T>(), Where(T.uniqueIDKeyPath, isMemberOf: sortedIDs)) ?? [] {
                    
                    try autoreleasepool {
                        
                        let uniqueIDValue = object.uniqueIDValue
                        
                        guard let source = mapping.removeValue(forKey: uniqueIDValue),
                            T.shouldUpdate(from: source, in: self) else {
                                
                                return
                        }

            )
            
            return try autoreleasepool {
              
                let entityType = into.entityClass as! T.Type
              
                let uniqueIDKeyPath = entityType.uniqueIDKeyPath
                guard let uniqueIDValue = try entityType.uniqueID(from: source, in: self) else {
                    
                    return nil
                }
                
                if let object = self.fetchOne(From(entityType), Where(uniqueIDKeyPath, isEqualTo: uniqueIDValue)) {
                    
                    guard entityType.shouldUpdate(from: source, in: self) else {
                        
                        return nil
                    }
