zoukankan      html  css  js  c++  java
  • Entity Framework中Remove、Modified实体时,在修改或删除时引发主键冲突的问题

    问题:

    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冲突错误,所以要用预加载

  • 相关阅读:
    AtCoder Regular Contest 086 E
    bzoj3192: [JLOI2013]删除物品(树状数组)
    bzoj5118: Fib数列2(费马小定理+矩阵快速幂)
    bzoj2314: 士兵的放置(树形DP)
    bzoj1907: 树的路径覆盖(树形DP)
    最小割 总结&&做题记录
    最大流 总结&&做题记录
    网络流24题之太空飞行计划
    网络流24题之负载平衡问题
    网络流24题之飞行员配对方案
  • 原文地址:https://www.cnblogs.com/qingfenglin/p/10640766.html
Copyright © 2011-2022 走看看