更新实体框架错误键相同值EF 6

时间:2014-07-08 05:14:48

标签: c# entity-framework updatemodel

我已经在c#中创建了像这样的代码

IList<BookViewModel> ListBook= _bookService.GetListById(BookViewModel);
  foreach (BookViewModel apart in ListBook)
    {
    apart.Status = "Published";
    _bookService.Update(apart);
    }

并在我的存储库中进行代码更新。

   public virtual TEntity Update(TEntity updatingObject)
        {
            this.GetDbSet<TEntity>().Attach(updatingObject);
            this.SetEntityState(updatingObject, EntityState.Modified);
            this.UnitOfWork.SaveChanges();
            return updatingObject;
        }

和我的方法

public IList<BookViewModel> GetListById(BookViewModel bookVM)
        {
            Expression<Func<Book, bool>> criteria = c => c.IdBook == bookVM.Id Book;

            return this.GetList(criteria);
        }

但我有错误

  

附加“Models.Book”类型的实体失败,因为另一个   已经是同一类型的实体        具有相同的主键值。使用“附加”方法或设置状态时可能会发生这种情况       如果图中的任何实体具有冲突的键值,则实体为“未更改”或“已修改”。       这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在        在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后设置状态       非适当的非实体实体“不变”或“修改”。

任何人都有改变代码更新方法的建议,我已经阅读了很多参考但是它有所不同。感谢的!

1 个答案:

答案 0 :(得分:0)

对于这个问题,我有一些我使用的更新实体的解决方案 实体框架扩展..这已经在金块..