public void AddToCurrentObjectGraphIndex(IReadOnlyEntity refEntity) { IEntityFieldValueList refKeyList = OperationUtils.ExtractEntityKeyValues(refEntity); if (!AlreadyInCurrentObjectGraph(refKeyList)) { _entityFieldValueList.Add(refKeyList); } }
private static ICollection <EntityFieldValue> ExtractValues(IEntity entity, bool key, Type typeToLoad) { ICollection <EntityFieldValue> entityFieldValues = new List <EntityFieldValue>(); EntityInfo parentEntityInfo = CacheManager.GetEntityInfo(entity); EntityInfo entityInfo = parentEntityInfo; while (entityInfo != null) { if (typeToLoad != null && typeToLoad != entityInfo.EntityType) { entityInfo = entityInfo.SuperEntityInfo; continue; } ICollection <IColumn> subLevelColumns = entityInfo.Columns; foreach (IColumn subLevelColumn in subLevelColumns) { if (!key || (subLevelColumn.Key && key)) { if (AlreadyHasTheColumnAdded(entityFieldValues, subLevelColumn)) { continue; } EntityRelationColumnInfo relationColumnInfo = entityInfo.FindRelationColumnInfo(subLevelColumn.AttributeName); if (relationColumnInfo != null) { ICollection <IEntity> relationEntities = GetRelationEntities(entity, relationColumnInfo.Relation); if (relationEntities.Count > 0) { foreach (IEntity relationEntity in relationEntities) { IEntityFieldValueList keyValueList = ExtractEntityKeyValues(relationEntity); EntityFieldValue fieldValue = keyValueList.GetFieldValue(relationColumnInfo.Mapping.ToField); entityFieldValues.Add(new EntityFieldValue(fieldValue.Value, subLevelColumn)); } } else { entityFieldValues.Add(new EntityFieldValue(null, subLevelColumn)); } } else { PropertyInfo getter = entityInfo.GetProperty(subLevelColumn.AttributeName); Object value = ReflectionUtils.GetValue(getter, entity); entityFieldValues.Add(new EntityFieldValue(value, subLevelColumn)); } } } entityInfo = entityInfo.SuperEntityInfo; } return(entityFieldValues); }
private static void ProcessIdentifyingRelations(IEntity entity, Type type, ITransaction tx , EntityInfo entityInfo, ITypeFieldValueList fieldValues) { ICollection <IRelation> dbRelations = entityInfo.Relations; foreach (IRelation relation in dbRelations) { if (relation.ReverseRelationship || relation.NonIdentifyingRelation) { continue; } if (IsProxyObject(entity, relation)) { continue; } ICollection <IEntity> childObjects = OperationUtils.GetRelationEntities(entity, relation); if (childObjects != null) { SetRelationObjectKeyValues(fieldValues, type, relation.RelatedObjectType, childObjects, relation); foreach (IEntity fieldObject in childObjects) { IEntityFieldValueList childEntityKeyList = OperationUtils.ExtractEntityKeyValues(fieldObject); if (entity.Context.AlreadyInCurrentObjectGraph(childEntityKeyList)) { continue; } fieldObject.Context.CopyReferenceStoreFrom(entity); if (fieldObject.Status != EntityStatus.Deleted) //deleted items are already deleted { fieldObject.Persist(tx); entity.Context.AddToCurrentObjectGraphIndex(fieldObject); } } } } }
public static bool IsEntityKeyEquals(IEntityFieldValueList item1, IEntityFieldValueList item2) { return(item1.Entity == item2.Entity && IsValueKeyEquals(item1, item2)); }