private void SaveBatch()

in apps/samplecode/education/rosterapi/EducationAccelerator.WebApi/EducationAccelerator.WebApi/Helpers/DynamicsSyncAgent.cs [188:218]


        private void SaveBatch<T, D>(List<T> records, Func<T, D> mappingFunction)
            where T : BaseModel
            where D : CrmBaseModel
        {
            foreach (var record in records)
            {
                // Convert object to destination model
                var converted = mappingFunction(record);

                if (converted?.msk12_sourcedid == null)
                {
                    throw new Exception("Encountered record without a sourcedid. Cannot continue.");
                }

                var result = converted.ToJson();

                // Upsert
                var request = new HttpRequestMessage(new HttpMethod("Patch"), new Uri($"{_crmApiUrl}{converted.EntitySetName}(msk12_sourcedid='{converted.msk12_sourcedid}')"));
                request.Headers.Add("OData-MaxVersion", "4.0");
                request.Headers.Add("OData-Version", "4.0");
                request.Content = new StringContent(result, Encoding.UTF8, "application/json");

                var response = _crmClient.SendAsync(request);
                
                if (response.Result.StatusCode != System.Net.HttpStatusCode.OK &&
                    response.Result.StatusCode != System.Net.HttpStatusCode.NoContent)
                {
                    throw new Exception(response.Result.ToString());
                }
            }
        }