无法更新EF6中的实体?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法更新EF6中的实体?相关的知识,希望对你有一定的参考价值。
我无法更新实体。下面是我用来更新实体的代码。它第一次更新时工作。但它下次失败了。
通用方法
public TEntity Update(TEntity entity)
{
_context.Entry(entity).State = EntityState.Modified;
_context.SaveChanges();
return entity;
}
调节器
public IHttpActionResult Put(Invoice invoice)
{
return Ok(invoiceService.UpdateInvoice(invoice));
}
服务
public Invoice UpdateInvoice(Invoice invoice)
{
return _repo.Update(invoice);
}
即将发生的错误。
System.InvalidOperationException:'附加类型为'Models.Invoice'的实体失败,因为同一类型的另一个实体已具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图表,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。
更新:请参阅下面的答案。
答案
它看起来你没有共享所有必要的代码。但解决方案如下。你的方法正在采取一些行动,并期望返回一些导致问题的价值。
这里要解决这个问题,你需要在Try catch块中包含代码并处理这个异常。
try{
//your code
}
catch(InvalidOperationException){
//you may keep this section blank.
}
另一答案
它可能不是最好的解决方案。但对于遇到此问题的任何人,我通过重新初始化上下文来解决它,因为它没有认识到实体已经可用。 (由id)
public TEntity Update(TEntity entity)
{
_context = new DbContex();
_context.Entry(entity).State = EntityState.Modified;
_context.SaveChanges();
return entity;
}
以上是关于无法更新EF6中的实体?的主要内容,如果未能解决你的问题,请参考以下文章