zoukankan      html  css  js  c++  java
  • ABP vNext 踩坑实录(一)

    在使用CrudAppService的UpdateAsync方法时,报错如下:

    The instance of entity type 'OrderItem' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.

    搜索到的大部分资料都把解决思路指向“AsNoTracking”,如:

    https://blog.csdn.net/chengmin1989/article/details/88941525

    但该方案于我并不适用。

    经分析,原因是:

    Order类中包含导航属性OrderItem,而OrderItem类中又包含导航属性Dish,UpdateAsync方法对这种较复杂的类支持不足或是需要进行相关的配置(暂未查到,欢迎知情的朋友指出)才能正确调用。

    条条大路通罗马,因此在查阅了一些博客和文档后,结合我的实际需求,解决方案如下:

    _context.Entry(dish).State = EntityState.Unchanged;
    _context.Entry(orderItem).State = EntityState.Added;
    _context.Entry(order).State = EntityState.Modified;

    _context.Orders.Update(order);
    var result = await _context.SaveChangesAsync();

    上方代码中的_context是一个继承自AbpDbContext的类的实例,问题至此被解决。

  • 相关阅读:
    python-Mitmproxy抓包
    pytest-html、cov、xdist
    python-unittest添加用例的几种方式
    python-*args、**kargs用法
    One,Two,Three,Ak模板
    栈和队列小练习
    区块链入门介绍笔记
    Research on Facebook and Social Graph
    线段树板子的小修改
    htaccess远古时期技术了解一下
  • 原文地址:https://www.cnblogs.com/wutongjun/p/14130365.html
Copyright © 2011-2022 走看看