public void Update(SpreadsheetProductViewModel product)
        {
            if (!UpdateDatabase)
            {
                var products = GetAll();
                var target   = products.FirstOrDefault(e => e.ProductID == product.ProductID);

                if (target != null)
                {
                    target.ProductName  = product.ProductName;
                    target.UnitPrice    = product.UnitPrice;
                    target.UnitsInStock = product.UnitsInStock;
                    target.Discontinued = product.Discontinued;
                }

                Session.SetObjectAsJson("SpreadsheetProducts", products);
            }
            else
            {
                using (var db = GetContext())
                {
                    var entity = new Product();

                    entity.ProductID    = product.ProductID;
                    entity.ProductName  = product.ProductName;
                    entity.UnitPrice    = product.UnitPrice;
                    entity.UnitsInStock = (short)product.UnitsInStock;
                    entity.Discontinued = product.Discontinued;

                    db.Products.Attach(entity);
                    db.Entry(entity).State = EntityState.Modified;
                    db.SaveChanges();
                }
            }
        }
        public void Destroy(SpreadsheetProductViewModel product)
        {
            if (!UpdateDatabase)
            {
                var products = GetAll();
                var target   = products.FirstOrDefault(e => e.ProductID == product.ProductID);

                if (target != null)
                {
                    products.Remove(target);
                }
            }
            else
            {
                using (var db = GetContext())
                {
                    var entity = new Product();

                    entity.ProductID = product.ProductID;

                    db.Products.Attach(entity);
                    db.Products.Remove(entity);

                    var orderDetails = db.OrderDetails.Where(pd => pd.ProductID == entity.ProductID);

                    foreach (var orderDetail in orderDetails)
                    {
                        db.OrderDetails.Remove(orderDetail);
                    }

                    db.SaveChanges();
                }
            }
        }
        public void Create(SpreadsheetProductViewModel product)
        {
            if (!UpdateDatabase)
            {
                var products = GetAll();
                var first    = products.OrderByDescending(e => e.ProductID).FirstOrDefault();
                var id       = (first != null) ? first.ProductID : 0;

                product.ProductID = id + 1;

                products.Add(product);

                Session.SetObjectAsJson("SpreadsheetProducts", products);
            }
            else
            {
                using (var db = GetContext())
                {
                    var entity = new Product();

                    entity.ProductName  = product.ProductName;
                    entity.UnitPrice    = product.UnitPrice;
                    entity.UnitsInStock = (short)product.UnitsInStock;
                    entity.Discontinued = product.Discontinued;

                    if (entity.CategoryID == null)
                    {
                        entity.CategoryID = 1;
                    }

                    db.Products.Add(entity);
                    db.SaveChanges();

                    product.ProductID = entity.ProductID;
                }
            }
        }