@implementation MantleObject
    ...
    - (NSPredicate *)managedObjectUniquingPredicate
    {
        return [NSPredicate predicateWithFormat:@"id_number == %@ && user_id == %@", self.id_number, self.user_id];
    }
    ...
    @end

Somewhere in your code call:
    NSError *error = nil;
    ManagedObject *managedObject = [MTLManagedObjectAdapter managedObjectFromModel:mantleObject insertingIntoContext:context error:&error];

```mantleObject``` is a ```MantleObject``` which subclasses ```MTLModel``` and follows ```MTLManagedObjectSerializing``` protocol.
```ManagedObject``` is a subclass of ```NSManagedObject```.

```mantleObject``` and its ```+ (NSString *)managedObjectEntityName``` will be used to construct ```managedObject```. But since we've included a ```managedObjectUniquingPredicate```, first a fetch request will be performed on ```context``` using the predict in ```MantleObject```'s implementation. If a managed object is fetched matching our ```managedObjectUniqingPredicate``` then property values from ```mantleObject``` will be transferred over to ```managedObject``` (following all NSValueTransformer rules already previously in place), else, a new managed object will be constructed and set with ```mantleObject```'s values and returned.