【发布时间】:2018-02-27 06:18:32
【问题描述】:
这个问题可能不仅仅针对 Azure 函数,但对我来说就是场景。我有 azure 函数,它正在处理来自服务总线主题订阅的消息。消息用于在 sql azure 服务器上的表中添加/更新数据。
对于数据库操作,我使用的是实体框架 6.2
我的消息可以是 100 条,但可能只有第一条消息是应该在数据库中插入条目的消息,接下来的几条是同一条记录的更新。
现在,在我的 Azure 函数中,我的 host.json 看起来像这样。
{
"serviceBus": {
"maxConcurrentCalls": 16,
"prefetchCount": 20,
"autoRenewTimeout": "00:05:00"
}
}
这意味着,它应该能够同时处理 16 条消息,它确实做到了。
但是,通过并发处理,实体框架上下文不会从并行运行的事务中更新,我最终有 10 行,而我应该在数据库中只有 1 行,因为它本质上是相同的记录。
是否有针对此的实体框架特定的解决方案?
【问题讨论】:
-
我认为你的架构是错误的。您不应该并行化必须以精确顺序处理的活动。或者,如果可行,为每个相关项目添加一个订单号,并在处理之前验证前一个是否已处理。如果否,请重新加入该项目以供将来处理。
标签: c# entity-framework azure azure-sql-database azure-functions