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 に答える