private static void SetSpec(tblSampleCustSpec spec, SampleOrderItemSpec itemSpec)
        {
            spec.Notes = itemSpec.Notes;

            spec.AstaMin = (int?) itemSpec.AstaMin;
            spec.AstaMax = (int?) itemSpec.AstaMax;
            spec.MoistureMin = (int?) itemSpec.MoistureMin;
            spec.MoistureMax = (int?) itemSpec.MoistureMax;
            spec.WaterActivityMin = (int?) itemSpec.WaterActivityMin;
            spec.WaterActivityMax = (int?) itemSpec.WaterActivityMax;
            spec.Mesh = (short?) itemSpec.Mesh;
            spec.AoverB = (int?) itemSpec.AoverB;
            spec.ScovMin = (int?) itemSpec.ScovMin;
            spec.ScovMax = (int?) itemSpec.ScovMax;
            spec.ScanMin = (int?) itemSpec.ScanMin;
            spec.ScanMax = (int?) itemSpec.ScanMax;
            spec.TPCMin = (int?) itemSpec.TPCMin;
            spec.TPCMax = (int?) itemSpec.TPCMax;
            spec.YeastMin = (int?) itemSpec.YeastMin;
            spec.YeastMax = (int?) itemSpec.YeastMax;
            spec.MoldMin = (int?) itemSpec.MoldMin;
            spec.MoldMax = (int?) itemSpec.MoldMax;
            spec.ColiformsMin = (int?) itemSpec.ColiformsMin;
            spec.ColiformsMax = (int?) itemSpec.ColiformsMax;
            spec.EColiMin = (int?) itemSpec.EColiMin;
            spec.EColiMax = (int?) itemSpec.EColiMax;
            spec.SalMin = (int?) itemSpec.SalMin;
            spec.SalMax = (int?) itemSpec.SalMax;
        }
        private void SetTblSampleDetails(tblSample tblSample, SampleOrder sampleOrder, ref bool commitNewContext)
        {
            var existingDetails = tblSample.tblSampleDetails.ToDictionary(n => n.SampleDetailID);
            var sampleDetailId = OldContext.tblSampleDetails.Select(n => n.SampleDetailID).DefaultIfEmpty(DateTime.Now.RoundMillisecondsForSQL()).Max();
            var custSpecId = OldContext.tblSampleCustSpecs.Select(n => n.CustSpecID).DefaultIfEmpty(DateTime.Now.RoundMillisecondsForSQL()).Max();
            var rvcMatchId = OldContext.tblSampleRVCMatches.Select(n => n.RVCMatchID).DefaultIfEmpty(DateTime.Now.RoundMillisecondsForSQL()).Max();
            foreach(var item in sampleOrder.Items)
            {
                tblSampleDetail detail = null;
                if(item.SampleDetailID != null && existingDetails.TryGetValue(item.SampleDetailID.Value, out detail))
                {
                    existingDetails.Remove(detail.SampleDetailID);
                }

                if(detail == null)
                {
                    commitNewContext = true;
                    sampleDetailId = sampleDetailId.AddSeconds(1);
                    detail = new tblSampleDetail
                        {
                            SampleDetailID = sampleDetailId,
                            SampleID = tblSample.SampleID,
                            s_GUID = Guid.NewGuid()
                        };
                    OldContext.tblSampleDetails.AddObject(detail);
                    item.SampleDetailID = detail.SampleDetailID;
                }

                detail.ProdID = item.Product == null ? (int?) null : int.Parse(item.Product.ProductCode);
                detail.Lot = item.Lot == null ? (int?) null : LotNumberParser.BuildLotNumber(item.Lot);
                detail.Qty = item.Quantity;
                detail.Desc = item.Description;
                detail.SampleMatch = item.CustomerProductName;

                if(item.Spec == null)
                {
                    DeleteTblSampleCustSpecs(detail);
                }
                else
                {
                    var spec = detail.tblSampleCustSpecs.FirstOrDefault(s => s.CustSpecID == item.Spec.CustSpecID);
                    if(spec == null)
                    {
                        commitNewContext = true;
                        custSpecId = custSpecId.AddSeconds(1);
                        spec = new tblSampleCustSpec
                            {
                                CustSpecID = custSpecId,
                                SampleDetailID = detail.SampleDetailID
                            };
                        OldContext.tblSampleCustSpecs.AddObject(spec);
                        item.Spec.CustSpecID = spec.CustSpecID;
                    }

                    SetSpec(spec, item.Spec);
                }

                if(item.Match == null)
                {
                    DeleteTblSampleRVCMatches(detail);
                }
                else
                {
                    var match = detail.tblSampleRVCMatches.FirstOrDefault(s => s.RVCMatchID == item.Match.RVCMatchID);
                    if(match == null)
                    {
                        commitNewContext = true;
                        rvcMatchId = rvcMatchId.AddSeconds(1);
                        match = new tblSampleRVCMatch
                            {
                                RVCMatchID = rvcMatchId,
                                SampleDetailID = detail.SampleDetailID
                            };
                        OldContext.tblSampleRVCMatches.AddObject(match);
                        item.Match.RVCMatchID = match.RVCMatchID;
                    }

                    SetMatch(match, item.Match);
                }
            }

            foreach(var detail in existingDetails)
            {
                DeleteTblSampleDetail(detail.Value);
            }
        }