【问题标题】:Update operation Issue in NopCommerce?NopCommerce 中的更新操作问题?
【发布时间】:2014-03-06 11:20:21
【问题描述】:

我正在使用 NopCommerce。我创建了名为“ProductViewDetails”的新表。我试图在此表中插入/更新记录。当我尝试在表中插入新记录时,新记录插入成功。但是当我尝试更新操作时,方法“UpdateData”执行成功但记录没有更新。

代码:

    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;
        }
    }
   }

有什么问题?

【问题讨论】:

  • 我们需要知道_productViewDetails.Update(productDetails);中的代码是什么
  • 你的Id PK和autocincrement吗?应该是,如果是,你如何更新Id然后
  • 我已将PK设置为Id,并且在ProductDetails表中也启用了自动增量属性。但是调用UpdateData方法后仍然没有更新记录。

标签: asp.net-mvc nopcommerce


【解决方案1】:

NopCommerce 使用具有延迟加载和代理实体的实体框架来跟踪更改,当您实例化一个新实体时(如在 new ProductViewDetails() 中),实体框架上下文对该实体一无所知,并且上下文无法跟踪任何更改.

  • 如果实体以前存在,则从存储库中获取它 GetById 方法而不是实例化它,上下文将返回 并附加和代理实体,因此上下文将处理每一个变化 你这样做了,当你调用 Update 时,所有更改都将被保存。
  • 如果您的实体是一个新实体,您应该调用 存储库。

【讨论】:

    【解决方案2】:

    试试这个

    ProductViewDetails ProductDetails = new ProductViewDetails();
    

    /在服务中创建此函数并调用此函数并检索所需的 ProductDetails 记录/

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

    【讨论】:

    • 非常感谢。这对我很有帮助。
    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多