我正在将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
”。明确设置永久值或 确保已将数据库配置为为此属性生成值
答案 0 :(得分:0)
当我有唯一索引时,我遇到了同样的异常,AddRange在唯一索引上失败,然后在catch异常块内部尝试删除整个插入的集合。 (不是我的代码,但是我必须修复它:-))
代码示例(简体):
Set xlbook = xlapp.workbooks.Open(filename:=folderPath & Application.PathSeparator & filename)
我认为您正在尝试(内部)以不同的方式做同一件事。只需使用事务而不是入侵EF。