博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework中Remove、Modified实体时,在修改或删除时引发主键冲突的问题
阅读量:5279 次
发布时间:2019-06-14

本文共 1583 字,大约阅读时间需要 5 分钟。

问题:

try

{
string fileId = context.NewsT.Where(t => t.Id == Model.Id).FirstOrDefault().FileId;
string filePath = context.FilesT.Where(t => t.Id == fileId).FirstOrDefault().Filepath;
var file = context.FilesT.FirstOrDefault(m => m.Id == fileId);
context.NewsT.Remove(Model);
context.FilesT.Remove(file);
var i = context.SaveChanges();
//删除文件
FilesHelper.DeleteFiles(ConfigHelper.GetSectionValue("filePath") + filePath);
result.ErrorCode = "1";
result.Message = "API调用成功";
httpResponseMessage.StatusCode = HttpStatusCode.OK;
}
catch (Exception e)
{
result.ErrorCode = "-999";
result.Message = e.Message;
httpResponseMessage.StatusCode = HttpStatusCode.InternalServerError;
}

ERROR:Attaching an entity of type 'Entity.TableClass' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate.

原因:主键冲突了

解决方案:

将 string fileId = context.NewsT.Where(t => t.Id == Model.Id).FirstOrDefault().FileId;修改为 string fileId = context.NewsT.AsNoTracking().Where(t => t.Id == Model.Id).FirstOrDefault().FileId;//AsNoTracking是预加载,因为ef本身是懒加载(延迟加载),所以如果这里不用预加载,到执行修改时会报model.id冲突错误,所以要用预加载

转载于:https://www.cnblogs.com/qingfenglin/p/10640766.html

你可能感兴趣的文章
Spring入门---示例四----集合与数组类型注入【第一天】
查看>>
洛谷—— P1765 手机_NOI导刊2010普及(10)
查看>>
MSIL实用指南-位运算
查看>>
unity 4.x 从入门到精通(持续更新)
查看>>
Ryu学习总结(持续更新)
查看>>
springboot1.5.9整合websocket实现实时显示的小demo
查看>>
zookeeper集群启动顺序问题
查看>>
读书笔记(4)
查看>>
[luogu2486] [SDOI2011]染色
查看>>
docker私有仓库-harbor
查看>>
golang 时间戳 时间格式化 获取当前时间 timestamp 计算时间差
查看>>
读书笔记 - 《联盟:互联网时代的人才变革》
查看>>
Vue 从入门到进阶之路(七)
查看>>
线段树(单点更新) POJ 2886 Who Gets the Most Candies?
查看>>
递推DP Codeforces Round #260 (Div. 1) A. Boredom
查看>>
DP+矩阵快速幂 HDOJ 5318 The Goddess Of The Moon
查看>>
后缀数组 POJ 1743 Musical Theme
查看>>
编译原理
查看>>
final修饰的变量是引用不能变还是对象的内容不能变?
查看>>
SSH协议
查看>>