实体映射关系如下,SISTUser和SISTUserRoles存在多对多的关系,生成中间表

 public partial class SISTUserMap: EntityTypeConfiguration<SISTUser>
{
public SISTUserMap()
{
this.ToTable("SISTUser");
this.HasKey(u => u.Id);
this.Property(u => u.Id).HasColumnName("UserId"); this.Property(u => u.UserName).HasMaxLength();
this.Property(u => u.Email).HasMaxLength(); this.HasMany(u => u.SISTUserRoles)
.WithMany()
.Map(m => m.ToTable("SISTUser_SISTUserRole_Mapping")); } }

更新操作

public ActionResult SetUserRole(string UserId, string RoleId)
{
try
{
SISTUser user = _userService.GetUserByUserId(UserId);
var allUserRoles = _userService.GetSISTRoles();
foreach (var userRole in allUserRoles)
{
if(userRole.Id==RoleId)
{
if (user.SISTUserRoles.Count(cr => cr.Id == userRole.Id) == )
user.SISTUserRoles.Add(userRole);
} else
{
if (user.SISTUserRoles.Count(cr => cr.Id == userRole.Id) > )
user.SISTUserRoles.Remove(userRole);
}
} _userService.UpdateUser(user); return Json(new BaseJsonResult<object> { success = true, msg = "编辑成功", data = null });
} catch (Exception ex)
{
return Json(new BaseJsonResult<object> { success = false, msg = ex.Message, data = null });
}
}

结果报错:违反了 PRIMARY KEY 约束 'PK_dbo.SISTUserRole'。

原因是下面的查询使用了TableNoTracking,具体底层原理待考察

  public virtual IList<SISTUserRole> GetSISTRoles()
{
//使用TableNoTracking会报错
return _sISTUserRoleRepository.Table.ToList();
}

EF多对多更新报错(TableNoTracking引发的bug)的更多相关文章

  1. EF core2.1+MySQL报错'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBuilder..ctor(Microsoft.EntityFrameworkCore.Storage.IRelationalTypeMapper)

    一.使用.net core 2.0 EF mysql 运行一直报错如下: An unhandled exception occurred while processing the request. M ...

  2. Vue热更新报错(log.error('[WDS] Errors while compiling. Reload prevented.'))

    log.error('[WDS] Errors while compiling. Reload prevented.');中的WDS其实是webpack-dev-serverwebpack的意思,用来 ...

  3. EF执行存储工程报错 String[4]: Size 属性具有无效大小值 0。

    EF中执行存储过程报错 String[4]: Size 属性具有无效大小值 0 排查后是如下问题所致,给定的参数没有设定大小(加入红框内的就可以了) private string GetCode(MC ...

  4. SVN更新报错问题(Please execute the 'Cleanup' command)

    SVN更新报错问题(Please execute the 'Cleanup' command) https://segmentfault.com/a/1190000012571289 svn: E20 ...

  5. druid + mysql + mybatis 批量更新报错

    首先 批量更新报错 sql injection violation, multi-statement not allow 然后看了博客:https://blog.csdn.net/qq_3634595 ...

  6. IIS错误代码500.21 ,Nhibernate更新报错,委托的使用。action传参数

    快速阅读 IIS错误代码500.21 ,Nhibernate更新报错,委托的使用.action传参数 IIS错误代码500.21 HTTP 错误 500.21 - Internal Server Er ...

  7. SVN更新报错

    将服务器SVN文件更新到本地是出现下图错误 报错中已经提示可以通过clean up来清理,若直接执行release lock,则不会解决问题. 原因:本地的项目中存在过期的工作副本 解决办法:选择该文 ...

  8. mybatis批量更新报错badsql

    mybatis批量更新时语法写的都对,但是报错,需要在连接上面加上allowMultiQueries=true 示例:jdbc:MySQL://192.168.1.236:3306/test?useU ...

  9. mybatis批量更新报错

    批量更新sql <update id="updateAutoAppraiseInfo" parameterType="Object"> <fo ...

随机推荐

  1. js中网页区域/正文/屏幕 宽和高

    网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offs ...

  2. windows bat批处理语法简析

    第一节先介绍windows批处理.这个起源于跟旁边同事学习在windows用命令行办公,渐渐地有些批处理功能就需要了,于是专门抽出了几天学习了一下.我认为文档最重要的功能是为了备忘,择取了很多文档的例 ...

  3. 线程池 Threadpool (还需要补充)

    1.池(pool)是一种常见的提高性能的方式.有时创建和销毁一些资源是非常耗费时间的行为.我们会考虑在一个池内放一些资源,在用的时候拿,不够的时候添加,用完就归还,这样就可以避免不断的创建和销毁资源了 ...

  4. win7系统的右键菜单只显示一个白色框不显示菜单项 解决办法

    如上图所示,桌面或其他大部分地方点击右键菜单,都只显示一个白色框,鼠标移上去才有菜单项看,并且效果很丑 解决办法: 计算机-右键-属性-高级-性能-设置-视觉效果-淡入淡出或滑动菜单到视图,将其前面的 ...

  5. Web API系列(三)统一异常处理

    前面讲了webapi的安全验证和参数安全,不清楚的朋友,可以看看前面的文章,<Web API系列(二)接口安全和参数校验>,本文主要介绍Web API异常结果的处理.作为内部或者是对外提供 ...

  6. Android studio 软件板块

  7. Linux常用命令和Shell编程基础

    目录相关 cd - .与.. 分别表示当前目录和父目录 - ~与$HOME 都是指当前用户的主目录 - cd – 切换到上一次所在的目录(不一定是父目录) pwd - pwd 显示当前目录 - $PW ...

  8. ROLAP和MOLAP的概念和差别

    ROLAP和MOLAP的概念和差别OLAP(on-Line Analysis Processing)是使分析人员.管理人员或执行人员能够从多角度对信息进行快速.一致.交互地存取,从而获得对数据的更深入 ...

  9. c++ 接口和抽象类

    其实对抽象类与接口的区别一直是搞不太清楚,最近正在学习<设计模式>,期间用到了很多c++多态的知识.这是才恍然发现,是应该整理下这方面的知识了.但在翻阅书本.上网查阅资料之际,发现有篇文章 ...

  10. MySql简易配置

    选择standard configuration ,然后next Service Name :服务名字 Launch the MySQL Server automatically:是否开机启动mysq ...