private Task<ProductDiamond> UpdatePatchAsync(ProductDiamond entity, Delta<ProductDiamond> patch)
 {
     patch.Patch(entity);
     return UpdateAsync(entity);
 }
 private Task<ProductDiamond> CreatePatchAsync(Delta<ProductDiamond> patch)
 {
     var entity = new ProductDiamond();
     patch.Patch(entity);
     return CreateAsync(entity);
 }
        private async Task<ProductDiamond> UpdateAsync(ProductDiamond entity)
        {
            var now = DateTimeOffset.UtcNow;
            var user = Thread.CurrentPrincipal.Identity.Name;

            entity.Update(this.database, this.database.Diamonds, now, user);

            await this.database.SaveChangesAsync();
            return entity;
        }
        public Task<IHttpActionResult> PutDiamond([FromODataUri] Guid id, ProductDiamond diamond, ODataQueryOptions<ProductDiamond> options)
        {
            if (!ModelState.IsValid)
            {
                return Task.FromResult((IHttpActionResult)BadRequest(ModelState));
            }

            if (id != diamond.Id)
            {
                return Task.FromResult((IHttpActionResult)BadRequest("The Id of diamond does not match the id"));
            }

            var diamonds = this.database.Diamonds.Where(r => r.Id == id);

            return PutOrPatchODataAsync(diamonds, options,
                () => CreateAsync(diamond),
                () => UpdateAsync(diamond));
        }
        public async Task<IHttpActionResult> PostDiamond(ProductDiamond diamond)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            return Created(await CreateAsync(diamond));
        }
 private static void Compare(ProductDiamond diamond, JToken token)
 {
     CompareCommon(diamond, token);
     Assert.AreEqual(diamond.Cost, (decimal)token["Cost"]);
     Assert.AreEqual(diamond.SalePrice, (decimal)token["SalePrice"]);
     Assert.AreEqual(diamond.Vendor, (string)token["Vendor"]);
     Assert.AreEqual(diamond.ReportType, ConvertToEnum<ProductDiamondReport>(token["ReportType"]));
     Assert.AreEqual(diamond.ReportNumber, (string)token["ReportNumber"]);
     Assert.AreEqual(diamond.Caret, (decimal?)token["Caret"]);
     Assert.AreEqual(diamond.Clarity, ConvertToEnum<ProductDiamondClarity>(token["Clarity"]));
     Assert.AreEqual(diamond.Color, ConvertToEnum<ProductDiamondColor>(token["Color"]));
     Assert.AreEqual(diamond.Cut, ConvertToEnum<ProductDiamondCut>(token["Cut"]));
     Assert.AreEqual(diamond.Polish, ConvertToEnum<ProductDiamondPolish>(token["Polish"]));
     Assert.AreEqual(diamond.Symmetry, ConvertToEnum<ProductDiamondSymmetry>(token["Symmetry"]));
     Assert.AreEqual(diamond.Fluorescence, (string)token["Fluorescence"]);
     Assert.AreEqual(diamond.Comment, (string)token["Comment"]);
 }