/// <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; }