Exemplo n.º 1
0
        public DynamicModels Execute(dynamic options,
            DynamicRepository repository,
            string associationName,
            string selectClause,
            IEnumerable<dynamic> models,
            string parentMemberName)
        {
            if (ShouldDiscardCache(options)) Cache = null;

            if (Cache != null) return Cache;

            var many = repository.Query(selectClause).ToList();

            foreach (var item in many)
            {
                var model = models.First(s => s.Id == item.GetMember(parentMemberName));

                item.SetMember(model.GetType().Name, model);
            }

            foreach (var model in models)
            {
                var assocation = model.AssociationNamed(associationName);

                var relatedTo = many.Where(s => s.GetMember(model.GetType().Name).Equals(model)).Select(s => s);

                assocation.EagerLoadMany.Cache = new DynamicModels(relatedTo);

                assocation.AddNewAssociationMethod(assocation.EagerLoadMany.Cache, model);
            }

            return new DynamicModels(many);
        }
Exemplo n.º 2
0
        public static DynamicModels Execute(IEnumerable<dynamic> models,
            DynamicRepository repository,
            string associationName,
            string sql,
            Func<dynamic, dynamic, bool> findClause)
        {
            var belongsResult = new List<dynamic>(repository.Query(sql));

            foreach (var item in belongsResult)
            {
                var relatedModels = models.Where(s => findClause(item, s));

                foreach (var relateModel in relatedModels)
                {
                    var association = relateModel.AssociationNamed(associationName);

                    association.Model = item;

                    var propName = relateModel.GetType().Name;

                    if (item.RespondsTo(propName))
                    {
                        ConvertToList(propName, item);

                        item.GetMember(propName).Add(relateModel);
                    }
                    else
                    {
                        item.SetMember(propName, relateModel);
                    }
                }
            }

            return new DynamicModels(belongsResult);
        }