2012-08-24 3 views
2

context.SaveChanges()을 호출하여 특정 제품을 업데이트하면 해당 업데이트가 데이터베이스에 등록되지 않습니다. 런타임 오류도 발생하지 않습니다. 나는 제품 카탈로그가 업데이트되지 않는다는 것을 알아 차렸다. 나는 여전히 같은 가치관을 보았다. 디버거를 실행할 때 데이터베이스의 연결 상태가 닫혔다는 것을 알게되었습니다. context.SaveChanges()가 SqlServer 데이터베이스의 데이터를 업데이트하지 않음

, 당신은 변경 사항을 유지하려면 다음 방법 중 하나를 사용할 수 있습니다, 전에 SaveProduct 방법에 context.SaveChanges() 메소드를 호출하기 EFProductRepository 클래스에서 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

를 구현하는 클래스입니다 데이터베이스

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(); 
} 
관련 문제