2014-03-06 36 views
1

我正在使用NopCommerce。我創建了一個名爲「ProductViewDetails」的新表。我試圖在此表中插入/更新記錄。當我試圖在表中插入新記錄時,新記錄插入成功。但是當我試圖更新操作,方法「更新數據」成功執行,但記錄沒有更新。NopCommerce中的更新操作問題?

代碼:

public void IncremementViews(int productId) 
    { 
    ProductViewDetails ProductDetails = new ProductViewDetails(); 
    ProductDetails.Id = 5; 
    ProductDetails.ProductId = 1; 
    ProductDetails.NumberOfViews = 10; 

    UpdateData(ProductDetails); 
    } 

    public void UpdateData(ProductViewDetails productDetails) 
    {   
     _productViewDetails.Update(productDetails); 

    } 

更新方法代碼:

public partial class EfRepository<T> : IRepository<T> where T : BaseEntity 
    { 
    private readonly IDbContext _context; 
    private IDbSet<T> _entities; 

    public void Update(T entity) 
    { 
     try 
     { 
      if (entity == null) 
       throw new ArgumentNullException("entity"); 

      this._context.SaveChanges(); 
     } 
     catch (DbEntityValidationException dbEx) 
     { 
      var msg = string.Empty; 

      foreach (var validationErrors in dbEx.EntityValidationErrors) 
       foreach (var validationError in validationErrors.ValidationErrors) 
        msg += Environment.NewLine + string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); 

      var fail = new Exception(msg, dbEx); 
      //Debug.WriteLine(fail.Message, fail); 
      throw fail; 
     } 
    } 
    } 

問題是什麼?

+0

我們需要知道的是在_productViewDetails什麼代碼。更新(產品詳細); – AndyMcKenna

+0

是你的Id PK和autocincrement ?,它應該是,如果是的話,如何更新Id然後 –

+0

我已經將PK設置爲Id,並且在ProductDetails表中也啓用了自動遞增屬性。但是在調用之後仍然沒有更新記錄UpdateData方法。 – Tushar

回答

3

NopCommerce使用延遲加載的實體框架和代理實體來跟蹤更改,當您實例化新實體時(如在新的ProductViewDetails()中)實體框架上下文對該實體一無所知並且上下文無法跟蹤變化。

  • 如果實體存在先前 GetById方法得到它從資源庫中,而不是將其實例化的,上下文將返回 和連接和代理的實體,這樣的背景下將釘的每一個變化 你做,當你調用Update所有的更改都將保存。
  • 如果您的實體是新實體,您應該調用 存儲庫的Add方法。
0

試試這個

ProductViewDetails ProductDetails = new ProductViewDetails(); 

/使該功能在服務和調用這個和功能找回所需的產品詳細記錄/

ProductDetails =_MostViewedProductService.GetMostViewedProductById(productId); 
         UpdateData(ProductDetails); 
+0

非常感謝。這對我很有幫助。 – Tushar