private static F_R_Flats defineFlatEnt(Apartment apart) { // Определение квартиры - для новой записи квартиры выполняется привязка модулей. F_R_Flats flatEnt = null; int revision = 0; if (apart.BaseStatus == EnumBaseStatus.Changed) { // Новая ревизия квартиры var lastRevision = entities.F_R_Flats.Local .Where(f => f.WORKNAME.Equals(apart.Name, StringComparison.OrdinalIgnoreCase)) .Max(r => r.REVISION); revision = lastRevision + 1; } else { flatEnt = entities.F_R_Flats.Local .Where(f => f.WORKNAME.Equals(apart.Name, StringComparison.OrdinalIgnoreCase)) .OrderByDescending(r => r.REVISION).FirstOrDefault(); } if (flatEnt == null) { flatEnt = entities.F_R_Flats.Add(new F_R_Flats() { WORKNAME = apart.Name, COMMERCIAL_NAME = "", REVISION = revision, TYPE_FLAT = apart.TypeFlat }); // Привязка модулей attachModulesToFlat(flatEnt, apart); } return(flatEnt); }
private static void attachModulesToFlat(F_R_Flats flatEnt, Apartment apart) { foreach (var module in apart.Modules) { // Модуль var moduleEnt = getModuleEnt(module); // Квартира-модуль var fmEnt = getFMEnt(flatEnt, moduleEnt, module); } }
private static F_nn_FlatModules getFMEnt(F_R_Flats flatEnt, F_R_Modules moduleEnt, Module module) { var fmEnt = flatEnt.F_nn_FlatModules.SingleOrDefault (fm => fm.F_R_Flats == flatEnt && fm.F_R_Modules == moduleEnt && fm.LOCATION.Equals(module.LocationPoint) && fm.DIRECTION.Equals(module.Direction) ); if (fmEnt == null) { fmEnt = new F_nn_FlatModules() { F_R_Flats = flatEnt, F_R_Modules = moduleEnt, LOCATION = module.LocationPoint, DIRECTION = module.Direction, ANGLE = module.Rotation }; flatEnt.F_nn_FlatModules.Add(fmEnt); } return(fmEnt); }
private static F_nn_FlatModules getFMEnt(F_R_Flats flatEnt, F_R_Modules moduleEnt, Module module) { var fmEnt = flatEnt.F_nn_FlatModules.SingleOrDefault (fm => fm.F_R_Flats == flatEnt && fm.F_R_Modules == moduleEnt && fm.LOCATION.Equals(module.LocationPoint) && fm.DIRECTION.Equals(module.Direction) ); if (fmEnt == null) { fmEnt = new F_nn_FlatModules() { F_R_Flats = flatEnt, F_R_Modules = moduleEnt, LOCATION = module.LocationPoint, DIRECTION = module.Direction, ANGLE = module.Rotation }; flatEnt.F_nn_FlatModules.Add(fmEnt); } return fmEnt; }