c# - 如何在长逻辑流中保持数据库并发

标签 c# entity-framework database-concurrency

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

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

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

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

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

谢谢!

最佳答案

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

如果您仍然无法相信这种关系的完整性,我建议您使用 bulk-update feature Entity Framework

关于c# - 如何在长逻辑流中保持数据库并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050792/

相关文章:

c# - 使用 foDicom Dicom Anonymizer 和安全配置文件

c# - 在 EF core 的启动文件中播种用户 : Dependency Injection Error

c# - EF6 重试过程为 SqlQuery 命令抛出 "The SqlParameter is already contained by another SqlParameterCollection"

amazon-web-services - 发电机 : Is adding an item using list_append atomic?

c# - python3 pythonnet 泛型代表

c# - 如何使用 LINQ-to-Entities 将数据插入到特定表中?

c# - 是否可以参数化 nunit 测试

linq - IQueryable 到 IQueryable<T>

SQL SUM 表达式和锁

SQL计数器增量并发问题-选择/更新问题