概述
报错:(外键FK_Base_RoleRight_Base_Role约束错误,要求在dbo.Base_Roles表中的列名"Roles_ID"的值存在)
The INSERT statement conflicted with the FOREIGN KEY constraint “FK_Base_RoleRight_Base_Roles”. The conflict occurred in database “SAM_DB”, table “dbo.Base_Roles”, column ‘Roles_ID’.
The statement has been terminated.
原来写法:
using (TransactionScope trans = new TransactionScope())
{
//增加角色信息
db.Add(info.MapTo<Base_Roles>());
//增加角色-权限 信息
db.Base_RoleRight.AddRange(info.Base_RoleRight.MapToList<Base_RoleRight>());
result = db.SaveChanges();
}
SQLServer Profiler监测:
正确写法:(增加db.SaveChanges()????
using (TransactionScope trans = new TransactionScope())
{
db.Add(info.MapTo<Base_Roles>());
db.SaveChanges();
db.Base_RoleRight.AddRange(info.Base_RoleRight.MapToList<Base_RoleRight>());
result = db.SaveChanges();
trans.Complete();
return result;
}
SQLServer Profiler监测:
再来看一个用户添加的例子:
using (TransactionScope trans = new TransactionScope())
{
db.Base_UserInfo.Add(base_UserInfoDto.MapTo<Base_UserInfo>());
db.SaveChanges();
db.Base_UserRight.AddRange(base_UserInfoDto.Base_UserRightDtoList.MapToList<Base_UserRight>());
db.Base_StaffOrganize.AddRange(base_UserInfoDto.Base_StaffOrganizeDtoList.MapToList<Base_StaffOrganize>());
db.Base_UserRole.AddRange(base_UserInfoDto.Base_UserRoleDtoList.MapToList<Base_UserRole>());
db.Base_AppendPropertyInstance.AddRange(base_UserInfoDto.Base_AppendPropertyInstanceDtoList.MapToList<Base_AppendPropertyInstance>());
result = db.SaveChanges();
trans.Complete();
}
SQLServer Profiler监测:
结论:RPC:Completed 执行的时候SQL顺序与代码的SQL顺序不一致。通过在每行EF语句间添加db.SaveChanges()执行顺序才会一致。
最后
以上就是光亮美女为你收集整理的EF多表外键关联,新增数据的时候外键错误的全部内容,希望文章能够帮你解决EF多表外键关联,新增数据的时候外键错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复