当我致电context.SaveChanges()
更新特定产品时,更新未在数据库中注册。我也没有得到任何运行时错误。我注意到的是我的产品目录没有更新。我仍然看到相同的价值观。当我运行调试器时,我注意到数据库的连接状态已关闭。
这是实现context.SaveChanges()
的类namespace SportsStore.Domain.Concrete
{
public class EFProductRepository : IProductRepository
{
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);
}
context.SaveChanges();
}
}
}
namespace SportsStore.Domain.Concrete
{
public class EFDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
}
namespace SportsStore.Domain.Entities
{
public class Product
{
[HiddenInput(DisplayValue=false)]
public int ProductID { get; set; }
public string Name { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
答案 0 :(得分:1)
在EFProductRepository
类中,在context.SaveChanges()
方法中调用SaveProduct
方法之前,您可以使用以下方法之一来保留对数据库的更改。
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
//One approach to persist changes to database
//var productInDB = context.Products.Single(x => x.ProductID ==product.ProductID);
//context.Entry(productInDB).CurrentValues.SetValues(product);
//context.SaveChanges();
//Alternate Approach
if (product.ProductID != 0)
{
context.Entry(product).State = System.Data.EntityState.Modified;
}
context.SaveChanges();
}