如果实体在同一数据库实体上进行查询之后,为什么附加实例会抛出异常。
附加“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?
请你能解释一下为什么会这样吗?
答案 0 :(得分:0)
如果您只想跳过错误,请尝试var article = entities.Article.AsNoTracking().Where(x => x.id == entity.id).FirstOrDefault();
如果您想知道为什么会这样,请等待我完整的答案