private static void addElementsToModule(Module module, F_R_Modules moduleEnt) { if (moduleEnt.F_nn_Elements_Modules.Count != 0) { // Непредвиденная ситуация. Не должно быть элементов в модуле //Logger.Log.Error("addElementsToModule() Непредвиденная ситуация. Не должно быть элементов в модуле"); entities.F_nn_Elements_Modules.RemoveRange(moduleEnt.F_nn_Elements_Modules); } // Элементы foreach (var elem in module.Elements) { // Определение элемента в базе var elemEnt = getElement(elem); // Добавление элемента в модуль var elemInModEnt = addElemToModule(elemEnt, moduleEnt, elem); } // Для дверей - найти стену в базе и сохранить в список doorsAndHostWall для записи реального idWall после первого обновления базы. var doors = module.Elements.OfType <DoorElement>(); foreach (var door in doors) { F_nn_Elements_Modules doorEmEnt = (F_nn_Elements_Modules)door.DBObject; List <F_nn_Elements_Modules> wallsHost = new List <F_nn_Elements_Modules>(); foreach (var item in door.HostWall) { F_nn_Elements_Modules wallEmEnt = (F_nn_Elements_Modules)item.DBObject; wallsHost.Add(wallEmEnt); } doorsAndHostWall.Add(new Tuple <F_nn_Elements_Modules, List <F_nn_Elements_Modules> >(item1: doorEmEnt, item2: wallsHost)); } }
private static F_nn_Elements_Modules addElemToModule(F_S_Elements elemEnt, F_R_Modules moduleEnt, Element elem) { var emEnt = new F_nn_Elements_Modules() { F_R_Modules = moduleEnt, F_S_Elements = elemEnt, DIRECTION = elem.Direction, LOCATION = elem.LocationPoint }; moduleEnt.F_nn_Elements_Modules.Add(emEnt); elem.DBObject = emEnt; return(emEnt); }
/// <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; }
private static F_nn_Elements_Modules addElemToModule(F_S_Elements elemEnt, F_R_Modules moduleEnt, Element elem) { var emEnt = new F_nn_Elements_Modules() { F_R_Modules = moduleEnt, F_S_Elements = elemEnt, DIRECTION = elem.Direction, LOCATION = elem.LocationPoint }; moduleEnt.F_nn_Elements_Modules.Add(emEnt); elem.DBObject = emEnt; return emEnt; }
public DoorElement(Module module, F_nn_Elements_Modules emEnt) : base(module, emEnt) { }