回滚时的实体框架InvalidOperationException

时间:2018-08-29 09:31:46

标签: c# entity-framework asp.net-mvc-4

我正在将Windows应用程序与nopcommerce集成在一起。因此,当我从nopcommerce注册客户时,所有信息都应保存到Windows应用程序的新表Customer中。为此,我在表GenericAttribute上插入后创建了触发器。

但是当我要注册客户时,在EfRepository.cs的以下架构中会发生错误:

protected string GetFullErrorTextAndRollbackEntityChanges(DbUpdateException exception)
{
    //rollback entity changes
    if (_context is DbContext dbContext)
    {
        var entries = dbContext.ChangeTracker.Entries()
            .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified).ToList();

        entries.ForEach(entry => entry.State = EntityState.Unchanged); //here error occurs
    }

    _context.SaveChanges();
    return exception.ToString();
}

,错误是:

  

InvalidOperationException:实体类型的属性“ Id”       尝试更改“ GenericAttribute”时有一个临时值       实体的状态为“ Unchanged”。明确设置永久值或       确保已将数据库配置为为此属性生成值

1 个答案:

答案 0 :(得分:0)

当我有唯一索引时,我遇到了同样的异常,AddRange在唯一索引上失败,然后在catch异常块内部尝试删除整个插入的集合。 (不是我的代码,但是我必须修复它:-))

代码示例(简体):

Set xlbook = xlapp.workbooks.Open(filename:=folderPath & Application.PathSeparator & filename)

我认为您正在尝试(内部)以不同的方式做同一件事。只需使用事务而不是入侵EF。