2012-08-24 3 views
2

Lorsque j'appelle context.SaveChanges() pour mettre à jour un produit spécifique, la mise à jour n'est pas enregistrée dans la base de données. Je n'ai pas d'erreur d'exécution non plus. Tout ce que je remarque, c'est que mon catalogue de produits n'est pas mis à jour. Je vois toujours les mêmes valeurs. Lorsque je lance le débogueur, je remarque que l'état de connexion de la base de données est fermé.context.SaveChanges() ne pas mettre à jour les données dans la base de données SqlServer

C'est la classe qui implémente les 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; } 
    } 
} 

Répondre

1

Dans la classe, EFProductRepository avant d'appeler la méthode context.SaveChanges() dans la méthode SaveProduct, vous pouvez utiliser l'une des approches suivantes Persister changements à la base de données.

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(); 
} 
Questions connexes