Example #1
0
        /// <summary>
        /// Экспорт квартир в базу.
        /// </summary>
        public static void Export(List <Apartment> apartments)
        {
            //TestInfoApartmentstoDb(apartments);
            if (apartments.Count == 0)
            {
                return;
            }

            using (entities = ConnectEntities())
            {
                //entities.Configuration.AutoDetectChangesEnabled = false;
                //entities.Configuration.ValidateOnSaveEnabled = false;

                // Загрузка последних квартир
                var flatsBD = entities.F_R_Flats.GroupBy(g => g.WORKNAME).
                              Select(s => s.OrderByDescending(o => o.REVISION).First()).ToList();
                // Загрузка последних модулей
                var modulesBD = entities.F_R_Modules.GroupBy(g => g.NAME_MODULE).
                                Select(s => s.OrderByDescending(o => o.REVISION).First());
                entities.F_nn_FlatModules.Load();
                entities.F_nn_ElementParam_Value.Load();
                entities.F_nn_Elements_Modules.Load();
                entities.F_S_Elements.Load();
                entities.F_S_FamilyInfos.Load();
                entities.F_S_Categories.Load();
                entities.F_nn_Category_Parameters.Load();

                try
                {
                    // Элементы дверей и их стены - для обновления параметрв idWall
                    doorsAndHostWall = new List <Tuple <F_nn_Elements_Modules, List <F_nn_Elements_Modules> > >();

                    // Модули - новые или с изменениями
                    var modules = apartments.SelectMany(a => a.Modules)
                                  .Where(m => !m.BaseStatus.HasFlag(EnumBaseStatus.Error) &&
                                         (
                                             m.BaseStatus.HasFlag(EnumBaseStatus.Changed) ||
                                             m.BaseStatus.HasFlag(EnumBaseStatus.New)
                                         )
                                         )
                                  .GroupBy(g => g.Name).Select(g => g.First());

                    using (var progress = new ProgressMeter())
                    {
                        progress.SetLimit(modules.Count());
                        progress.Start("Запись модулей в базу...");

                        foreach (var module in modules)
                        {
                            progress.MeterProgress();
                            // поиск модуля
                            var moduleEnt = defineModuleEnt(module, modulesBD);
                        }
                        progress.Stop();
                    }

                    using (var progress = new ProgressMeter())
                    {
                        progress.SetLimit(modules.Count());
                        progress.Start("Запись квартир в базу...");

                        // Определение квартир и привязка модулей
                        foreach (Apartment apart in apartments)
                        {
                            progress.MeterProgress();
                            // Определение квартиры
                            var flatEnt = defineFlatEnt(apart);
                        }
                        progress.Stop();
                    }

                    // Сохранение изменений
                    entities.SaveChanges();

                    // обновление параметра стен для дверей
                    if (doorsAndHostWall.Count > 0)
                    {
                        foreach (var doorAndHostWall in doorsAndHostWall)
                        {
                            F_nn_Elements_Modules doorEmEnt = doorAndHostWall.Item1;
                            string hostWallsValue           = string.Join(";", doorAndHostWall.Item2.Select(w => w.ID_ELEMENT_IN_MODULE.ToString()));
                            // Запись id стены в параметр
                            // Поиск параметра IdWall для заполнения
                            var paramHostWall = doorEmEnt.F_S_Elements.F_nn_ElementParam_Value.Single(p =>
                                                                                                      p.F_nn_Category_Parameters.F_S_Parameters.NAME_PARAMETER
                                                                                                      .Equals(Options.Instance.DoorHostWallParameter, StringComparison.OrdinalIgnoreCase));
                            paramHostWall.PARAMETER_VALUE = hostWallsValue;// wallEmEnt.ID_ELEMENT_IN_MODULE.ToString();
                        }
                    }
                    entities.SaveChanges();
                }
                catch (System.Exception ex)
                {
                    Inspector.AddError(ex.Message, icon: System.Drawing.SystemIcons.Error);
                }
            }
            return;
        }
        /// <summary>
        /// Экспорт квартир в базу.
        /// </summary>      
        public static void Export(List<Apartment> apartments)
        {
            //TestInfoApartmentstoDb(apartments);
            if (apartments.Count == 0)
            {
                return;
            }

            using (entities = ConnectEntities())
            {
                //entities.Configuration.AutoDetectChangesEnabled = false;
                //entities.Configuration.ValidateOnSaveEnabled = false;

                // Загрузка последних квартир
                var flatsBD = entities.F_R_Flats.GroupBy(g => g.WORKNAME).
                            Select(s => s.OrderByDescending(o => o.REVISION).First()).ToList();
                // Загрузка последних модулей
                var modulesBD = entities.F_R_Modules.GroupBy(g=>g.NAME_MODULE).
                              Select(s=>s.OrderByDescending(o=>o.REVISION).First());
                entities.F_nn_FlatModules.Load();
                entities.F_nn_ElementParam_Value.Load();
                entities.F_nn_Elements_Modules.Load();
                entities.F_S_Elements.Load();
                entities.F_S_FamilyInfos.Load();
                entities.F_S_Categories.Load();
                entities.F_nn_Category_Parameters.Load();

                try
                {
                    // Элементы дверей и их стены - для обновления параметрв idWall
                    doorsAndHostWall = new List<Tuple<F_nn_Elements_Modules, List<F_nn_Elements_Modules>>>();

                    // Модули - новые или с изменениями
                    var modules = apartments.SelectMany(a => a.Modules)
                                            .Where(m => !m.BaseStatus.HasFlag(EnumBaseStatus.Error) &&
                                                     (
                                                        m.BaseStatus.HasFlag(EnumBaseStatus.Changed) ||
                                                        m.BaseStatus.HasFlag(EnumBaseStatus.New)
                                                     )
                                                  )
                                            .GroupBy(g => g.Name).Select(g => g.First());

                    using (var progress = new ProgressMeter())
                    {
                        progress.SetLimit(modules.Count());
                        progress.Start("Запись модулей в базу...");

                        foreach (var module in modules)
                        {
                            progress.MeterProgress();
                            // поиск модуля
                            var moduleEnt = defineModuleEnt(module, modulesBD);
                        }
                        progress.Stop();
                    }

                    using (var progress = new ProgressMeter())
                    {
                        progress.SetLimit(modules.Count());
                        progress.Start("Запись квартир в базу...");

                        // Определение квартир и привязка модулей
                        foreach (Apartment apart in apartments)
                        {
                            progress.MeterProgress();
                            // Определение квартиры
                            var flatEnt = defineFlatEnt(apart);
                        }
                        progress.Stop();
                    }

                    // Сохранение изменений
                    entities.SaveChanges();

                    // обновление параметра стен для дверей
                    if (doorsAndHostWall.Count > 0)
                    {
                        foreach (var doorAndHostWall in doorsAndHostWall)
                        {
                            F_nn_Elements_Modules doorEmEnt = doorAndHostWall.Item1;
                            string hostWallsValue = string.Join(";", doorAndHostWall.Item2.Select(w => w.ID_ELEMENT_IN_MODULE.ToString()));
                            // Запись id стены в параметр
                            // Поиск параметра IdWall для заполнения
                            var paramHostWall = doorEmEnt.F_S_Elements.F_nn_ElementParam_Value.Single(p =>
                                  p.F_nn_Category_Parameters.F_S_Parameters.NAME_PARAMETER
                                     .Equals(Options.Instance.DoorHostWallParameter, StringComparison.OrdinalIgnoreCase));
                            paramHostWall.PARAMETER_VALUE = hostWallsValue;// wallEmEnt.ID_ELEMENT_IN_MODULE.ToString();
                        }
                    }
                    entities.SaveChanges();
                }
                catch (System.Exception ex)
                {
                    Inspector.AddError(ex.Message, icon: System.Drawing.SystemIcons.Error);
                }
            }
            return;
        }