EF Core中并发插入的唯一约束违规

时间:2018-04-13 22:07:38

标签: c# postgresql amazon-web-services .net-core entity-framework-core

我正在为ASP.NET Core 2.0应用程序编写ETL /数据提取过程。工作流程如下:

  1. CSV已上传到Amazon S3

  2. 触发初始lambda函数,将csv“块”化为 许多小文件,每个文件有1000条记录。原因是 解决Lambda的5分钟运行时限制。

  3. 这些“块”文件中的每一个都会触发另一个lambda函数 实际上处理记录并插入/更新Postgres 数据库。此函数使用 Parallel.ForEach 循环 进一步增加并发性。

  4. 正在加载的数据基本上等于业务应用程序的用户数据,但跨越多个表。我遇到的问题是,当两个具有相同 new 相关实体的用户基本上同时导入时,我最终会遇到一个唯一的约束错误,因为他们都找不到相关的实体并尝试创建它,但当然一个赢,然后第二个失败,当它也试图创建它。

    我熟悉在使用行级锁定等更新记录时如何处理并发性,但对于插入,我不知道如何最好地处理这种情况,可能会尝试捕获错误然后查找现有实体并将其附加到新用户。在其他语言和框架中,我使用了CreateOrUpdate类功能​​来处理这个问题,但我在EF Core中找不到类似的东西。

0 个答案:

没有答案