One thing you can do is create your own migration policy class, which has a function that maps your attribute from the original value to the new value. For example, I had a case where I needed to display an object called MyItems, which had a direct connection with a set of value objects called "Elements", instead, to store the itemID so that I could split the model into several stores.
The old model looked like this: 
The new model looks like this: 
To do this, I wrote a mapping class with a function called itemIDForItemName, and it was defined as such:
@interface Migration_Policy_v1tov2 : NSEntityMigrationPolicy { NSMutableDictionary *namesToIDs; } - (NSNumber *) itemIDForItemName:(NSString *)name; @end
#import "Migration_Policy_v1tov2.h"
@implementation Migration_Policy_v1tov2 - (BOOL)beginEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error { namesToIDs = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1],@"Apples", [NSNumber numberWithInt:2],@"Bananas", [NSNumber numberWithInt:3],@"Peaches", [NSNumber numberWithInt:4],@"Pears", [NSNumber numberWithInt:5],@"Beef", [NSNumber numberWithInt:6],@"Chicken", [NSNumber numberWithInt:7],@"Fish", [NSNumber numberWithInt:8],@"Asparagus", [NSNumber numberWithInt:9],@"Potato", [NSNumber numberWithInt:10],@"Carrot",nil]; return YES; } - (NSNumber *) itemIDForItemName:(NSString *)name { NSNumber *iD = [namesToIDs objectForKey:name]; NSAssert(iD != nil,@"Error finding ID for item name:%@",name); return iD; } @end
Then, for the associated mapping name for the attribute in your mapping model, the Value expression is called as the result of calling the function as such: FUNCTION ($ entityPolicy, "itemIDForItemName", $ source.name). You must also set the custom policy field of your mapping name for this attribute for your mapping class name (in this case, Migration_Policy_v1toV2).
