了解DBContext是如何工作的,本地对象在它的范围之外工作

本文关键字:工作 对象 范围 何工作 DBContext 了解 | 更新日期: 2023-09-27 17:52:38

{
   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相当陌生。在做教程时,我很难理解如何保存到上下文工作,特别是我的意思是这部分:

  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的了解,本地创建的对象只存在于它创建时的范围内。包含来自"Product Product"的更改值的"Product prod"如何将其自身与"上下文"关联并成功保存更改?

另外,"context.SaveChanges()"调用如何工作,因为它不发送任何"Product"类型的参数?

了解DBContext是如何工作的,本地对象在它的范围之外工作

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

这可以工作,因为prodcontext中的一个特定项目,它有一个唯一的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如果你不明白,我可能会解释更多