public static ClientAndClientBuildingsPackage GetPackageCopy(this ClientAndClientBuildingsPackage source) { ClientAndClientBuildingsPackage result = new ClientAndClientBuildingsPackage(); if (source != null) { if (source.Client != null) { result.Client = source.Client.GetPrimitiveCopy(); foreach (ClientBuildingAndBuildingPackage clientBuildingAndBuildingPackage in source.ClientBuildings) { result.ClientBuildings.Add(clientBuildingAndBuildingPackage.GetPackageCopy()); } } } return result; }
public static ClientAndClientBuildingsPackage GetClientAndBuildingsPackage(this Client client) { ClientAndClientBuildingsPackage result = new ClientAndClientBuildingsPackage(); if (client != null) { result.Client = client.GetPrimitive(); if (client.ClientBuildings != null) { foreach (ClientBuilding clientBuilding in client.ClientBuildings) { if (clientBuilding != null && clientBuilding.Building != null) result.ClientBuildings.Add(clientBuilding.GetClientBuildingAndBuildingPackage()); } } } return result; }
/// <summary> /// Updates the client. /// </summary> /// <param name="clientPrimitive">The client primitive.</param> public void CreateOrUpdateClient(ClientAndClientBuildingsPackage clientAndBuildingsPackage) { try { using (SmartWorkingEntities context = new SmartWorkingEntities()) { Client client = clientAndBuildingsPackage.Client.GetEntity(); Client existingObject = context.Clients.Include("ClientBuildings").Where(x => x.Id == client.Id).FirstOrDefault(); //no record of this item in the DB, item being passed in has a PK if (existingObject == null && client.Id > 0) { throw new FaultException<ExceptionDetail>(new ExceptionDetail(new Exception("Błąd zapisu do bazy")), "Obiekt nie istniał w bazie, a jego Id jest większe od 0."); } //Item has no PK value, must be new if (client.Id <= 0) { context.Clients.AddObject(client); foreach (ClientBuildingAndBuildingPackage clientBuildingPackage in clientAndBuildingsPackage.ClientBuildings) { ClientBuildingPrimitive clientBuildingPrimitive = clientBuildingPackage.GetClientBuildingPrimitiveWithReference(); if (clientBuildingPrimitive != null) { clientBuildingPrimitive.Id = 0; ClientBuilding clientBuilding = clientBuildingPrimitive.GetEntity(); clientBuilding.Client = client; context.ClientBuildings.AddObject(clientBuilding); } } } //Item was retrieved, and the item passed has a valid ID, do an update else { List<ClientBuildingPrimitive> existingClientBuildings = existingObject.ClientBuildings.Where(x => !x.IsDeleted).Select(x => x.GetPrimitive()).ToList(); List<ClientBuildingPrimitive> newClientBuildings = clientAndBuildingsPackage.GetClientBuildingListWithReference().ToList(); List<ClientBuildingPrimitive> theSameElements = newClientBuildings.Where(x => existingClientBuildings.Select(y => y.Building_Id).Contains(x.Building_Id)).ToList(); existingClientBuildings.RemoveAll(x => theSameElements.Select(y => y.Building_Id).Contains(x.Building_Id)); newClientBuildings.RemoveAll(x => theSameElements.Select(y => y.Building_Id).Contains(x.Building_Id)); //remove if (existingClientBuildings.Count() > 0) { List<int> existingClientBuildingIds = existingClientBuildings.Select(x => x.Id).ToList(); List<ClientBuilding> clientBuildingListToDelete = context.ClientBuildings.Where(x => existingClientBuildingIds.Contains(x.Id)).ToList(); foreach (ClientBuilding clientBuldingToDelete in clientBuildingListToDelete) { clientBuldingToDelete.Deleted = DateTime.Now; //context.ClientBuildings.DeleteObject(clientBuldingToDelete); } } //add foreach (ClientBuildingPrimitive clientBuildingPrimitive in newClientBuildings) { context.ClientBuildings.AddObject(clientBuildingPrimitive.GetEntity()); } context.Clients.ApplyCurrentValues(client); } context.SaveChanges(); } } catch (Exception e) { throw new FaultException<ExceptionDetail>(new ExceptionDetail(e), e.Message); } }