Beispiel #1
0
        private Func <object, TableEntityRow, object> Get_GetOrCreateEntity_Computation(IncludeBinding includeBinding, MaterializationData data)
        {
            var getbaseObjects    = Get_GetBaseObjects_Computation(includeBinding, data);
            var entityConstructor = new EntityConstructor(entityContext, includeBinding.Type);

            return((projectedEntity, source) =>
            {
                if (projectedEntity == null)
                {
                    return null;
                }
                var tableObjects = new List <object>();
                tableObjects.Add(projectedEntity);
                tableObjects.AddRange(getbaseObjects(source));
                return entityConstructor.GetOrCreateEntity(tableObjects.ToArray());
            });
        }
Beispiel #2
0
        private Func <object, TableEntityRow, object> Get_GetOrCreateEntityOrCollection_Computation(IncludeBinding includeBinding, MaterializationData data)
        {
            if (entityContext._InternalServices.TypeTranslationUtil.IsEntityCollection(includeBinding.Type))
            {
                var unprojectedBinding = data.ProjectedType.UnprojectedBindings
                                         .Find(ub => (ub is UnprojectedCollectionBinding || ub is UnprojectedManyToManyBinding) && ub.TargetBinding == includeBinding);
                if (unprojectedBinding != null)
                {
                    if (unprojectedBinding is UnprojectedManyToManyBinding)
                    {
                        return(Get_GetUnprojectedCollections_Computation(unprojectedBinding, data.ManyToManyMaps));
                    }
                    else
                    {
                        return(Get_GetUnprojectedCollections_Computation(unprojectedBinding, data.InheritanceChains));
                    }
                }
                else
                {
                    var collItemType = TypesUtil.GetGenericArgumentForBaseType(includeBinding.Type, typeof(ICollection <>));
                    var collectionEntityConstructor = new EntityConstructor(entityContext, collItemType);

                    return((tableEntity, source) =>
                    {
                        var list = new List <object>();
                        foreach (var item in (tableEntity as IEnumerable))
                        {
                            list.Add(collectionEntityConstructor.GetOrCreateEntity(new object[] { item }));
                        }
                        return list;
                    });
                }
            }

            return(Get_GetOrCreateEntity_Computation(includeBinding, data));
        }