实体框架查询后附加错误

时间:2017-04-27 09:40:51

标签: c# .net asp.net-mvc entity-framework

如果实体在同一数据库实体上进行查询之后,为什么附加实例会抛出异常。

  

附加“Article”类型的实体失败,因为另一个实体   相同类型已具有相同的主键值。这可能发生   使用“附加”方法或将实体的状态设置为时   如果图中的任何实体具有“未更改”或“已修改”   冲突的关键值。这可能是因为一些实体是新的和   尚未收到数据库生成的键值。在这种情况下使用   “添加”方法或“已添加”实体状态可跟踪图表和   然后将非新实体的状态设置为“未更改”或“已修改”   酌情。

在attach语句之前删除查询使其按预期工作。

我的控制器:

public JsonResult Update(Article entity)
{
    JsonResult jRes = new JsonResult();
    ArticleDA repo = new ArticleDA();
    jRes.Data = repo.Update(entity);
    return jRes;
}

我的模特

public Result Update(Article entity)
{
    Result result = new Result();
    using (Entities entities = new Entities())
    {
        try
        {
            var article = entities.Article.Where(x => x.id == entity.id).FirstOrDefault();
            entities.Article.Attach(entity);
            entities.Entry(entity).State = EntityState.Modified;

            entities.SaveChanges();
            result.OK = true;
        }
        catch (Exception err)
        {
            result.OK = false;
        }
    }
    return result;
}

我知道在attach语句之前的查询没有意义,但我只是想知道为什么在attach抛出异常之前查询db。

是否因为查询具有该ID的实体的数据库使其可用于EntityFramework?

请你能解释一下为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

如果您只想跳过错误,请尝试var article = entities.Article.AsNoTracking().Where(x => x.id == entity.id).FirstOrDefault();

如果您想知道为什么会这样,请等待我完整的答案