【问题标题】:How to maintain database concurrency in long logical flows如何在长逻辑流中保持数据库并发
【发布时间】:2019-09-22 15:41:17
【问题描述】:

我们首先使用实体​​框架代码将报表保存到 SQL 数据库,许多对象具有多对多关系,因此数据被拆分到不同的表中。 为了防止数据重复,我们首先检查某个对象是否已经保存,然后我们将关系添加到数据库中。

例如对象 Person 可以有多个国家,对象 Country 可以容纳多个 Person 对象。

在保存流程开始时,我们会查询数据库中的现有国家,如果存在则在 Person 对象中更新它们,如果不存在则创建它们。

当我们同时只有一个保存过程时,此流程运行良好,但现在我们需要同时支持多次,我担心一个线程会在另一个线程检查现有国家/地区之后立即添加一个新国家/地区。

我想知道有什么好的做法可以在对性能影响最小的情况下解决这个问题。

谢谢!

【问题讨论】:

    标签: c# entity-framework database-concurrency


    【解决方案1】:

    这听起来不像您完全利用了您选择的 ORM 的功能。如果您使用库 according to it's documentation,则在您返回的实体中表示关系。因此,只要EntityID 保持不变,更新单个实体的多对多关系就会更新所有其他相关实体。

    如果您仍然无法信任这种关系的完整性,我建议使用实体框架的bulk-update feature

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2017-03-16
      • 2011-07-13
      • 2020-10-31
      • 2019-04-13
      • 2011-03-06
      • 2012-05-19
      相关资源
      最近更新 更多