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()); }); }
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)); }