Ejemplo n.º 1
0
        public void AddToCurrentObjectGraphIndex(IReadOnlyEntity refEntity)
        {
            IEntityFieldValueList refKeyList = OperationUtils.ExtractEntityKeyValues(refEntity);

            if (!AlreadyInCurrentObjectGraph(refKeyList))
            {
                _entityFieldValueList.Add(refKeyList);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
 public static bool IsEntityKeyEquals(IEntityFieldValueList item1, IEntityFieldValueList item2)
 {
     return(item1.Entity == item2.Entity && IsValueKeyEquals(item1, item2));
 }