首页 > 解决方案 > 如何在长逻辑流中保持数据库并发

问题描述

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

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

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

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

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

谢谢!

标签: c#entity-frameworkdatabase-concurrency

解决方案


听起来您并没有充分利用您选择的 ORM 的功能。如果您根据其文档使用该库,则关系将在您返回的实体中表示。EntityID因此,只要保持不变,更新单个实体的多对多关系就会更新所有其他相关实体。

如果您仍然无法信任这种关系的完整性,我建议您使用实体框架的批量更新功能


推荐阅读