private void ExportRelatedDatas(MixCmsContext context, IDbContextTransaction transaction)
        {
            foreach (var item in AttributeSetDatas)
            {
                var getDataResult = MixRelatedAttributeDatas.ImportViewModel.Repository
                                    .GetModelListBy(m => m.ParentId == item.Id && m.Specificulture == item.Specificulture
                                                    , context, transaction);

                if (getDataResult.IsSucceed && getDataResult.Data.Count > 0)
                {
                    var data = getDataResult.Data.Where(m =>
                                                        AttributeSetDatas.Any(d => d.Id == m.DataId) &&
                                                        !RelatedData.Any(r => r.ParentId == item.Id && r.DataId == m.DataId))
                               .ToList();
                    RelatedData.AddRange(data);
                }
            }
        }
        private void GetAdditionalData(string id, MixEnums.MixAttributeSetDataType type, MixCmsContext context, IDbContextTransaction transaction)
        {
            var getRelatedData = MixRelatedAttributeDatas.ReadViewModel.Repository.GetSingleModel(
                m => m.Specificulture == Specificulture && m.ParentType == (int)type &&
                m.ParentId == id, context, transaction);

            if (getRelatedData.IsSucceed)
            {
                RelatedData.Add(getRelatedData.Data);
                var getData = MixAttributeSetDatas.ImportViewModel.Repository.GetSingleModel(
                    m => m.Specificulture == Specificulture && m.Id == getRelatedData.Data.Id);
                if (getData.IsSucceed)
                {
                    getData.Data.Fields = new List <MixAttributeFields.UpdateViewModel>();
                    foreach (var item in getData.Data.Values)
                    {
                        getData.Data.Fields.Add(item.Field);
                    }
                    AttributeSetDatas.Add(getData.Data);
                }
            }
        }
        private void ProcessAttributeSetsAsync(MixCmsContext context, IDbContextTransaction transaction)
        {
            foreach (var item in AttributeSets)
            {
                item.Fields = MixAttributeFields.UpdateViewModel.Repository.GetModelListBy(a => a.AttributeSetId == item.Id, context, transaction).Data?.OrderBy(a => a.Priority).ToList();
                // Filter list reference field => Add to Export Data if not exist
                var refFields = item.Fields.Where(f => f.DataType == MixEnums.MixDataType.Reference);

                foreach (var field in refFields)
                {
                    var refSet = AttributeSets.FirstOrDefault(m => m.Name == field.AttributeSetName);
                    if (refSet == null)
                    {
                        var getSet = MixAttributeSets.ImportViewModel.Repository.GetSingleModel(m => m.Name == field.AttributeSetName, context, transaction);
                        if (getSet.IsSucceed)
                        {
                            refSet = getSet.Data;
                            // Load ref data if export parent Data
                            if (item.IsExportData)
                            {
                                var refData = MixAttributeSetDatas.ImportViewModel.Repository.GetModelListBy(
                                    a => a.Specificulture == Specificulture && a.AttributeSetId == refSet.Id, context, transaction)
                                              .Data?.OrderBy(a => a.Priority).ToList();
                                if (refData != null)
                                {
                                    AttributeSetDatas.AddRange(refData);
                                }
                            }
                            AttributeSets.Add(getSet.Data);
                        }
                    }
                    else
                    {
                        refSet.IsExportData = refSet.IsExportData || item.IsExportData;
                        if (item.IsExportData)
                        {
                            refSet.Data = refSet.Data ?? MixAttributeSetDatas.ImportViewModel.Repository.GetModelListBy(
                                a => a.Specificulture == Specificulture && a.AttributeSetId == refSet.Id, context, transaction)
                                          .Data?.OrderBy(a => a.Priority).ToList();
                        }
                    }
                }
                // Load export data if checked and did not process
                if (item.IsExportData)
                {
                    var data = item.Data ?? MixAttributeSetDatas.ImportViewModel.Repository.GetModelListBy(
                        a => a.Specificulture == Specificulture && a.AttributeSetId == item.Id, context, transaction)
                               .Data?.OrderBy(a => a.Priority).ToList();
                    if (data != null)
                    {
                        AttributeSetDatas.AddRange(data);
                    }
                    foreach (var d in item.Data)
                    {
                        var getRelatedData = MixRelatedAttributeDatas.ReadViewModel.Repository.GetModelListBy(
                            m => m.ParentId == d.Id && d.Specificulture == Specificulture);
                        if (getRelatedData.IsSucceed)
                        {
                            RelatedData.AddRange(getRelatedData.Data);
                        }
                    }
                }
            }
        }