EF多对多更新报错(TableNoTracking引发的bug)
实体映射关系如下,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)的更多相关文章
- 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 ...
- Vue热更新报错(log.error('[WDS] Errors while compiling. Reload prevented.'))
log.error('[WDS] Errors while compiling. Reload prevented.');中的WDS其实是webpack-dev-serverwebpack的意思,用来 ...
- EF执行存储工程报错 String[4]: Size 属性具有无效大小值 0。
EF中执行存储过程报错 String[4]: Size 属性具有无效大小值 0 排查后是如下问题所致,给定的参数没有设定大小(加入红框内的就可以了) private string GetCode(MC ...
- SVN更新报错问题(Please execute the 'Cleanup' command)
SVN更新报错问题(Please execute the 'Cleanup' command) https://segmentfault.com/a/1190000012571289 svn: E20 ...
- druid + mysql + mybatis 批量更新报错
首先 批量更新报错 sql injection violation, multi-statement not allow 然后看了博客:https://blog.csdn.net/qq_3634595 ...
- IIS错误代码500.21 ,Nhibernate更新报错,委托的使用。action传参数
快速阅读 IIS错误代码500.21 ,Nhibernate更新报错,委托的使用.action传参数 IIS错误代码500.21 HTTP 错误 500.21 - Internal Server Er ...
- SVN更新报错
将服务器SVN文件更新到本地是出现下图错误 报错中已经提示可以通过clean up来清理,若直接执行release lock,则不会解决问题. 原因:本地的项目中存在过期的工作副本 解决办法:选择该文 ...
- mybatis批量更新报错badsql
mybatis批量更新时语法写的都对,但是报错,需要在连接上面加上allowMultiQueries=true 示例:jdbc:MySQL://192.168.1.236:3306/test?useU ...
- mybatis批量更新报错
批量更新sql <update id="updateAutoAppraiseInfo" parameterType="Object"> <fo ...
随机推荐
- Python MongoDB使用介绍
MongoDB介绍 MongoDB是一个面向文档的,开源数据库程序,它平台无关.MongoDB像其他一些NoSQL数据库(但不是全部!)使用JSON结构的文档存储数据.这是使得数据非常灵活,不需要的S ...
- ubuntu14 安装配置nginx+php5+mysql
1.首先,升级软件包 sudo apt-get update sudo apt-get upgrade 2.安装nginx sudo apt-get install nginx 在浏览器输入服务器ip ...
- vue.js开发环境搭建
1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) 2.基于node.js,利用淘宝npm镜像安装相关依赖 在cmd ...
- A*寻路算法探究
A*寻路算法探究 A*算法常用在游戏的寻路,是一种静态网路中求解最短路径的搜索方法,也是解决很多搜索问题的算法.相对于Dijkstra,BFS这些算法在复杂的搜索更有效率.本文在U3D中进行代码的测试 ...
- HTTP压力测试工具
HttpTest4Net是一款基于C#实现的和HTTP压力测试工具,通过工具可以简单地对HTTP服务进行一个压力测试.虽然VS.NET也集成了压力测试项目,但由于VS自身占用的资源导致了在配置不高的P ...
- MySQL模糊搜索的四种用法
1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '% ...
- REDHAT一总复习1 NTP更改时区,并验证时区设置是否正确
把计算机时区调整到巴哈马(这是个啥地方?听都没听过.) 使用 tzselect 进行确定时区,并进行可对话性的设置,按照对应的序号,射进去就行了. 使用:timedatectl set-timezo ...
- 通过JAVA程序测试闰年
首先简要介绍一下公历上规定的闰年:四年一闰,百年不闰,四百年再闰. 针对这一规则,简要的设计部分测试用例: 附(测试截图): 以下为该程序代码段: import javafx.application. ...
- 改变bootstrap-wysiwyg样式(如hide()show()等),上传图片失效
最近在试验bootstrap-wysiwyg鱼easyui的整合,两者的兼容性,可以说是基本不兼容... 但是由于需求摆在那里,再大的困难也得克服. 比如像是将bootstrap-wysiwyg放入e ...
- 2013 Asia Regional Changchun C
Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K ( ...