2

当我调用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; }
    }
}
4

1 回答 1

2

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();
}
于 2012-09-04T13:50:17.943 回答