了解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"类型的参数?
{
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如果你不明白,我可能会解释更多