MCPcopy Create free account
hub / github.com/DanWahlin/CustomerManagerStandard / mergeEntity

Function mergeEntity

CustomerManager/Scripts/breeze.debug.js:15126–15189  ·  view source on GitHub ↗
(mc, node, meta)

Source from the content-addressed store, hash-verified

15124
15125 // can return null for a deleted entity if includeDeleted == false
15126 function mergeEntity(mc, node, meta) {
15127 node._$meta = meta;
15128 var em = mc.entityManager;
15129
15130 var entityType = meta.entityType;
15131 if (typeof (entityType) === 'string') {
15132 entityType = mc.metadataStore._getEntityType(entityType, false);
15133 }
15134 node.entityType = entityType;
15135
15136 var mergeStrategy = mc.mergeOptions.mergeStrategy;
15137 var isSaving = mc.query == null;
15138
15139 var entityKey = entityType.getEntityKeyFromRawEntity(node, mc.rawValueFn);
15140 var targetEntity = em.findEntityByKey(entityKey);
15141 if (targetEntity) {
15142 if (isSaving && targetEntity.entityAspect.entityState.isDeleted()) {
15143 em.detachEntity(targetEntity);
15144 return targetEntity;
15145 }
15146 var targetEntityState = targetEntity.entityAspect.entityState;
15147 if (mergeStrategy === MergeStrategy.Disallowed) {
15148 throw new Error("A MergeStrategy of 'Disallowed' prevents " + entityKey.toString() + " from being merged");
15149 } else if (mergeStrategy === MergeStrategy.SkipMerge) {
15150 updateEntityNoMerge(mc, targetEntity, node);
15151 } else {
15152 if (mergeStrategy === MergeStrategy.OverwriteChanges
15153 || targetEntityState.isUnchanged()) {
15154 updateEntity(mc, targetEntity, node);
15155 targetEntity.entityAspect.wasLoaded = true;
15156 if (meta.extraMetadata) {
15157 targetEntity.entityAspect.extraMetadata = meta.extraMetadata;
15158 }
15159 targetEntity.entityAspect.entityState = EntityState.Unchanged;
15160 targetEntity.entityAspect.originalValues = {};
15161 targetEntity.entityAspect.propertyChanged.publish({ entity: targetEntity, propertyName: null });
15162 var action = isSaving ? EntityAction.MergeOnSave : EntityAction.MergeOnQuery;
15163 em.entityChanged.publish({ entityAction: action, entity: targetEntity });
15164 // this is needed to handle an overwrite of a modified entity with an unchanged entity
15165 // which might in turn cause _hasChanges to change.
15166 if (!targetEntityState.isUnchanged()) {
15167 em._notifyStateChange(targetEntity, false);
15168 }
15169 } else {
15170 if (targetEntityState == EntityState.Deleted && !mc.mergeOptions.includeDeleted) {
15171 return null;
15172 }
15173 updateEntityNoMerge(mc, targetEntity, node);
15174 }
15175 }
15176 } else {
15177 targetEntity = entityType._createInstanceCore();
15178
15179 updateEntity(mc, targetEntity, node);
15180
15181 if (meta.extraMetadata) {
15182 targetEntity.entityAspect.extraMetadata = meta.extraMetadata;
15183 }

Callers 1

processMetaFunction · 0.85

Calls 2

updateEntityNoMergeFunction · 0.85
updateEntityFunction · 0.85

Tested by

no test coverage detected