public static void Save(OrderModel model) { Order entity = getEntityByModel(model); string result = string.Empty; if (entity.IsValid()) { if (model.Id > 0) { result = service.Update(entity); } else { result = service.Insert(entity); } if (!string.IsNullOrEmpty(result)) { var savedLines = getDetailByOrderId(Convert.ToInt64(result)); if (savedLines.Count() > model.OrderDetail.Count()) { var tobeDeleted = savedLines.Take(savedLines.Count() - model.OrderDetail.Count()); foreach (var item in tobeDeleted) { service.DeleteOrderDetail(item.Id); } savedLines = getDetailByOrderId(Convert.ToInt64(result)); } foreach (var detail in model.OrderDetail) { OrderDetail detailEntity = getEntityByModel(detail); if (detailEntity.IsValid()) { detailEntity.OrderId = Convert.ToInt64(result); if (savedLines.Count() > 0) { detailEntity.Id = savedLines.FirstOrDefault().Id; savedLines.Remove(savedLines.FirstOrDefault(rec => rec.Id == detailEntity.Id)); service.Update(detailEntity); } else { service.Insert(detailEntity); } } } } } }