【问题标题】:Prevent duplicate record insert Entity Framework Webooks防止重复记录插入实体框架电子书
【发布时间】:2018-09-13 10:31:26
【问题描述】:

我们目前每天都会收到许多来自第三方公司的 webhook。

webhook 数据包含开始日期和结束日期以及用户 ID。当这些 webhook 进入时,我首先检查以确保数据库中不存在该记录。例如

 var CheckForDuplicateRefreshWebhook = await db.DataRefreshes.SingleOrDefaultAsync(x => x.startdate = startdate && x.enddate == enddate && x.userid == userid);

if(CheckForDuplicateRefreshWebhook == null)
{
  //Insert Record
} else {
  //Dont Insert Record
}

现在我遇到的问题是 2 个精确的 webhook 相隔几毫秒。这种情况很少发生,但仍在将两个 webhook 数据插入到数据库中。

我认为第一个 webhook 进来了,而对现有记录的检查仍在执行,第二个确切的 webhook 也进来了,而检查记录是否在数据库中存在的代码尚未完成正在执行,并且正在添加两个确切的 webhook。

我想知道是否有办法避免这种情况?我一直在寻找如何等待任务完成后再继续,但仍然没有成功。

因此,总体而言,重复的 webhook 进入速度很快,以至于在插入第二个 webhook 之前第一个插入尚未完成。

基于 webhook 何时进入,我们还执行另一组函数,这些函数还将另一组记录插入另一个表,并在另一个表中创建重复项。

谢谢

【问题讨论】:

    标签: c# entity-framework duplicates webhooks


    【解决方案1】:

    Windows 有许多同步功能。 . .如此之多,实际上很难确定要使用哪个。搜索信号量、互斥量和临界区。 . .各有优劣。 . .阅读所有内容,然后根据您的具体情况做出决定。

    【讨论】:

      【解决方案2】:

      解决此方案的一种方法是将入站数据放入队列,并让辅助线程或进程按照项目放入队列的顺序在队列中工作。

      这可能会产生性能问题,因为瓶颈是处理队列中项目的单个进程。

      【讨论】:

        猜你喜欢
        • 2015-04-19
        • 2014-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多