             return try autoreleasepool {
                 
                 return try sourceArray.flatMap { (source) -> T? in
-                    
-                    guard T.shouldInsert(from: source, in: self) else {
+                  
+                    let entityType = into.entityClass as! T.Type
+                  
+                    guard entityType.shouldInsert(from: source, in: self) else {
                         
                         return nil
                     }

            )
            
            return try autoreleasepool {
                
                let uniqueIDKeyPath = T.uniqueIDKeyPath
                guard let uniqueIDValue = try T.uniqueID(from: source, in: self) else {
                    
                    return nil
                }
                
                if let object = self.fetchOne(From<T>(), Where(uniqueIDKeyPath, isEqualTo: uniqueIDValue)) {
                    
                    guard T.shouldUpdate(from: source, in: self) else {
                        
                        return nil
                    }

                    
                    try autoreleasepool {
                        
                        guard entityType.shouldInsert(from: source, in: self) else {
                            
                            return
                        }
