【发布时间】:2017-09-25 00:47:25
【问题描述】:
如果在对同一数据库实体进行查询之后,实体的附加为什么会引发异常。
附加“文章”类型的实体失败,因为另一个实体 相同的类型已经具有相同的主键值。这可能发生 当使用“附加”方法或将实体的状态设置为 “未更改”或“已修改”,如果图中的任何实体具有 键值冲突。这可能是因为一些实体是新的并且 尚未收到数据库生成的键值。在这种情况下使用 'Add' 方法或 'Added' 实体状态来跟踪图形和 然后将非新实体的状态设置为“未更改”或“已修改” 视情况而定。
在附加语句之前删除查询使其按预期工作。
我的控制器:
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;
}
我知道附加语句之前的查询没有意义,但我只是想知道为什么在附加语句之前查询数据库会引发异常。
是否因为在数据库中查询具有该 ID 的实体使其可用于 EntityFramework?
请你解释一下为什么会这样?
【问题讨论】:
-
您可以检查
article,如果存在则使用entities.Entry(article ).State = EntityState.Detached;删除本地化它 -
通过查询,您将具有与参数实体相同 ID 的
Article拉入上下文。如果您随后尝试添加参数,它将失败,因为 Id 已经存在。 -
哈,这很有道理@Mats391,谢谢 ;-)
标签: c# .net asp.net-mvc entity-framework