前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >The instance of entity type 'Menu' cannot be tracked because another instance with the same key valu

The instance of entity type 'Menu' cannot be tracked because another instance with the same key valu

作者头像
CherishTheYouth
发布2019-07-30 15:19:27
3.5K0
发布2019-07-30 15:19:27
举报
文章被收录于专栏:Vue技术实践

这里记录一个在使用.net core中ef core执行数据库操作时遇到的问题:

我在代码中使用DbContext下的Update方法准备将更改后的数据像这样步到数据库:

代码语言:javascript
复制
_context.Menus.Update(menu);

这是很常见的用法,但没想到一直报如下错误:

代码语言:javascript
复制
The instance of entity type 'Menu' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.

使用谷歌翻译翻译为:

代码语言:javascript
复制
无法跟踪实体类型“Menus”的实例,因为已经跟踪了具有相同键值的{'Id'}的另一个实例。

我的代码如下:

代码语言:javascript
复制
 if (!menu.OrderNumber.HasValue)
     {
         var maxOrderItem =
          _context.Menus.Where(x => x.ParentId == menu.ParentId)
           .OrderByDescending(x => x.OrderNumber)
            .FirstOrDefault();
          menu.OrderNumber = maxOrderItem != null ? maxOrderItem.OrderNumber + 1 : 999;
     }
                ///EF core中没有AddOrUpdate方法,所以针对是新增菜单还是修改菜单做出判断
 if (isNewMenu)
    {
        _context.Menus.Add(menu);
    }
    else
    {
        _context.Menus.Update(menu);///此处报出上述异常
    }               
    _context.SaveChanges();

我通过百度,发现国内网站上没有出现类似错误的记载,最后,我在stackoverflow上看到一段类似问题描述:

该用户描述,他进行了如下尝试:

在使用_context获取值时,使用AsNoTracking()方法,我进行尝试,修改我的代码如下:

代码语言:javascript
复制
if (!menu.OrderNumber.HasValue)
{
    var maxOrderItem =
        _context.Menus.AsNoTracking().Where(x => x.ParentId == menu.ParentId)
            .OrderByDescending(x => x.OrderNumber)
            .FirstOrDefault();
    menu.OrderNumber = maxOrderItem != null ? maxOrderItem.OrderNumber + 1 : 999;
}
///EF core中没有AddOrUpdate方法,所以针对是新增菜单还是修改菜单做出判断
if (isNewMenu)
{
    _context.Menus.Add(menu);
}
else
{
    _context.Menus.Update(menu);
}               
_context.SaveChanges();

发现我遇到的这个问题得以圆满解决。

我在这里记录一下这个问题,但其中的道理我没有深究,就不说了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档