public ActionResult Destroy(IEnumerable<ProductViewModel> products)
        {
            using (var northwind = new Northwind())
            {
                //Iterate all destroyed products which are posted by the Kendo Grid
                foreach (var productViewModel in products)
                {
                    // Create a new Product entity and set its properties from productViewModel
                    var product = new Product
                    {
                        ProductID = (int)productViewModel.ProductID,
                    };

                    // Attach the entity
                    northwind.Products.Attach(product);
                    // Delete the entity
                    northwind.Products.DeleteObject(product);
                }

                // Delete the products from the database
                northwind.SaveChanges();

                //Return emtpy result
                return Json(null);
            }
        }
        public ActionResult Read(int take, int skip, IEnumerable<Sort> sort, Kendo.DynamicLinq.Filter filter)
        {
            using (var northwind = new Northwind())
            {
                var result = northwind.Products
                    .OrderBy(p => p.ProductID) // EF requires ordered IQueryable in order to do paging
                    // Use a view model to avoid serializing internal Entity Framework properties as JSON
                    .Select(p => new ProductViewModel
                    {
                        ProductID = p.ProductID,
                        ProductName = p.ProductName,
                        UnitPrice = p.UnitPrice,
                        UnitsInStock = p.UnitsInStock,
                        Discontinued = p.Discontinued
                    })
                    .ToDataSourceResult(take, skip, sort, filter);

                return Json(result);
            }
        }
        public ActionResult Create(IEnumerable<ProductViewModel> products)
        {
            var result = new List<Product>();

            using (var northwind = new Northwind())
            {
                //Iterate all created products which are posted by the Kendo Grid
                foreach (var productViewModel in products)
                {
                    // Create a new Product entity and set its properties from productViewModel
                    var product = new Product
                    {
                        ProductName = productViewModel.ProductName,
                        UnitPrice = productViewModel.UnitPrice,
                        UnitsInStock = productViewModel.UnitsInStock,
                        Discontinued = productViewModel.Discontinued
                    };

                    // store the product in the result
                    result.Add(product);

                    // Add the entity
                    northwind.Products.AddObject(product);
                }

                // Insert all created products to the database
                northwind.SaveChanges();

                // Return the inserted products - the Kendo Grid needs their ProductID which is generated by SQL server during insertion

                return Json(result.Select(p => new ProductViewModel
                {
                    ProductID = p.ProductID,
                    ProductName = p.ProductName,
                    UnitPrice = p.UnitPrice,
                    UnitsInStock = p.UnitsInStock,
                    Discontinued = p.Discontinued
                })
                .ToList());
            }
        }
        public ActionResult Update(IEnumerable<ProductViewModel> products)
        {
            using (var northwind = new Northwind())
            {
                //Iterate all updated products which are posted by the Kendo Grid
                foreach (var productViewModel in products)
                {
                    // Create a new Product entity and set its properties from productViewModel
                    var product = new Product
                    {
                        ProductID = (int)productViewModel.ProductID,
                        ProductName = productViewModel.ProductName,
                        UnitPrice = productViewModel.UnitPrice,
                        UnitsInStock = productViewModel.UnitsInStock,
                        Discontinued = productViewModel.Discontinued
                    };

                    // Attach the entity
                    northwind.Products.Attach(product);
                    // Change its state to Modified so Entity Framework can update the existing product instead of creating a new one
                    northwind.ObjectStateManager.ChangeObjectState(product, EntityState.Modified);
                }

                // Save all updated products to the database
                northwind.SaveChanges();

                //Return emtpy result
                return Json(null);
            }
        }
        public ActionResult Read()
        {
            using (var northwind = new Northwind())
            {
                var products = northwind.Products
                    // Use a view model to avoid serializing internal Entity Framework properties as JSON
                    .Select(p => new ProductViewModel
                    {
                        ProductID = p.ProductID,
                        ProductName = p.ProductName,
                        UnitPrice = p.UnitPrice,
                        UnitsInStock = p.UnitsInStock,
                        Discontinued = p.Discontinued
                    })
                    .ToList();

                return Json(products);
            }
        }