0
{
   public class EFProductRepository : IProductsRepository
    {
        private EFDbContext context = new EFDbContext();

        public IQueryable<Product> Products {
            get { return context.Products; }

        }

        public void SaveProduct(Product product)
        {
            if (product.ProductID == 0)
            {
                context.Products.Add(product);
            }
            else 
            {
               Product prod = context.Products.First(x => x.ProductID ==             product.ProductID);
                prod.Description = product.Description;
                prod.Category = product.Category;
                prod.Name = product.Name;
                prod.Price = product.Price;
            }


            context.SaveChanges();


        }

        public void DeleteProduct(Product product) {

            context.Products.Remove(product);
            context.SaveChanges();


        }

    }
}

我对 ASP.NET 相当陌生,在做教程时,我无法理解保存到上下文的工作原理,特别是我的意思是这部分:

  else 
                {
                   Product prod = context.Products.First(x => x.ProductID ==             product.ProductID);
                    prod.Description = product.Description;
                    prod.Category = product.Category;
                    prod.Name = product.Name;
                    prod.Price = product.Price;
                }


                context.SaveChanges();

根据我对 OOP 的了解,在本地创建的对象仅存在于创建它的范围内。包含“产品产品”的更改值的“产品产品”如何与“上下文”相关联并成功保存变化?

此外,“context.SaveChanges()”调用如何工作,因为它不发送任何“产品”类型的参数?

4

1 回答 1

1
           {
               Product prod = context.Products.First(x => x.ProductID == ...
                prod.Description = product.Description;
                prod.Category = product.Category;
                prod.Name = product.Name;
                prod.Price = product.Price;
            }

这是有效的,因为prod它是一个特定的项目context,它具有分配给它的唯一 ID,您可以更改除 ID 之外的其他属性 - 在此示例中的描述、类别、名称和价格,它从语境。上下文知道已对从中提取的对象进行了更改,因此context.saveChanges()可以正常工作。如果你要这样做:

           {
                Product prod = new Product()
                prod.Description = product.Description;
                prod.Category = product.Category;
                prod.Name = product.Name;
                prod.Price = product.Price;
            }

那是行不通的,因为它不是从上下文中提取的对象。在这种情况下,必须完成插入,然后 saveChanges 如果这对您没有意义,我可能会解释更多

于 2013-01-14T00:17:48.890 回答