entity-framework-core - 唯一键违规后无法重新插入
问题描述
我有以下情况:
使用 EF Core2 的业务逻辑函数检查记录是否已存在。如果记录不存在,则将其插入数据库。
我有多个线程调用这个业务逻辑函数。会发生什么:
如果使用相同的参数同时调用该函数,则两个实例都会检查记录是否存在 - 并且它不存在。所以两个实例都插入了相同的记录。
在context.SaveChanges()
第一次调用时,一切正常。但是第二个SaveChanges()
抛出异常,因为记录已经存在(数据库上有一个唯一索引)。
如果我捕获该异常并尝试使用新值插入UNIQUE_KEY
,它仍然会引发异常,因为之前添加的实体仍在跟踪中。
如何实现这一点以避免异常?
解决方案
您可以修改导致异常的现有实体,而不是简单地在 catch 块中添加新实体。
foreach (var entry in _dbContext.ChangeTracker.Entries<YourEntity>().Where(e => e.State == EntityState.Added)))
{
entry.Entity.YourProperty = newvalue;
}
只需遍历给定类型的所有实体并更新具有唯一约束的属性。
推荐阅读
- python - 我无法为 tkinter optionmenu 输入导出 csv 文件
- dataframe - 无法遍历 pyspark 中的数据帧
- javascript - 如何编辑 Ext.js 的预建主题?
- kubernetes - Vetx 应用程序中的优雅关闭
- excel - 如何删除数据中定义的差距以上的值(Excel)?
- arrays - Dart 在字符串中打印地图数组
- r - 从 svyglm() 模型获得协变量调整的患病率估计值
- php - 刷新 WooCommerce Minicart 菜单项计数和总数
- laravel - laravel 验证错误消息未显示在必需选项卡中
- c - 我的“if”语句有什么问题我得到一个垃圾值?