先上图:
上面是报的错:
我这个项目用的是上下文实例唯一,
当我要编辑更新时,提示如上异常
下面是我编辑写的代码:
public int Edit(int id,T entity)
{
//T tt=db.Set<T>().Find(id);
db.Entry(entity).State = EntityState.Modified;
return db.SaveChanges(); //运行时,这句是不执行的,然后就报错了
}
我想知道如何根据查询到的实体更新实体呢?
或者有什么其他解决办法么? 请大侠积极吐槽啊~ 拜谢!~
楼上说的都不对.原因是.他先从ef里把这个ID的实体查询出来了.这时ef追踪里已经有了这个ID对应的实体对象.
他又new了一个新的对象给这个对象的id赋值相同的值.然后想把这个新对象也添加到实体追踪里.这时候ef实体追踪就有2个相同id的对象.所以抛这个异常.正经的做法是所有要修改的对象都要从ef里读出来再赋值.不要去添加追踪.不然就会有这问题.所以说院子里那些ef教程.很多这种误人子弟的.
你是对的。
主键重复了,看下数据库
你给错代码了吧,报错的Edit 是没有参数 int id 的
你修改的是主键吧?