context.SaveChanges()不更新SqlServer数据库中的数据

时间:2012-08-24 16:24:16

标签: entity-framework-4.1

当我致电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; }
    }
}

1 个答案:

答案 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();
}