protected virtual Object PopulateEntity(NodeContext nodeContext, IEntity entity) {
var aspect = entity.EntityAspect;
if (aspect.EntityManager == null) {
// new to this entityManager
ParseObject(nodeContext, aspect);
aspect.Initialize();
// TODO: This is a nit. Wierd case where a save adds a new entity will show up with
// a AttachOnQuery operation instead of AttachOnSave
_mappingContext.EntityManager.AttachQueriedEntity(entity, (EntityType)nodeContext.StructuralType);
} else if (_mappingContext.MergeStrategy == MergeStrategy.OverwriteChanges || aspect.EntityState == EntityState.Unchanged) {
// overwrite existing entityManager
ParseObject(nodeContext, aspect);
aspect.Initialize();
aspect.OnEntityChanged(_mappingContext.LoadingOperation == LoadingOperation.Query ? EntityAction.MergeOnQuery : EntityAction.MergeOnSave);
} else {
// preserveChanges handling - we still want to handle expands.
ParseObject(nodeContext, null);
}
return entity;
}