我正在使用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;
}
}
}
有什么问题?
答案 0 :(得分:3)
NopCommerce使用具有延迟加载和代理实体的实体框架来跟踪更改,当您实例化新实体时(如在新的ProductViewDetails()中),实体框架上下文对该实体一无所知,并且上下文无法跟踪任何更改
答案 1 :(得分:0)
试试这个
ProductViewDetails ProductDetails = new ProductViewDetails();
/ 在服务中创建此函数并调用此函数并检索所需的ProductDetails记录 /
ProductDetails =_MostViewedProductService.GetMostViewedProductById(productId);
UpdateData(ProductDetails);