Blazor 实体框架线程发布和保存

问题描述 投票:0回答:1

我有一个 Microsoft Blazor 应用程序,它使用 Entity Framework 6 与使用 NPGSQL 的 PostgreSQL 数据库进行通信。我有以下场景:

我有一个启用调度程序的按钮,这个按钮正在更新 tableA 上启用了调度程序的行,列 scheduled = true。然后另一个周期线程正在启动,它正在操作 tableA 上的同一行以指定调度程序是否处于锁定模式,同时为了跳过下一次迭代而破坏,列锁 = true。

当我看到我第一次更改调度程序启用时,我面临一些数据更新不一致,即使在 SaveChanges with scheduled = true, in database 为 false 之后也是如此。顺序如下 Button schedule on -> thread start -> column schedule = true

我相信这是因为 ChangeTracker 识别了一个更改,要么用于计划,要么用于锁定和更新整个记录以覆盖其他更改。

如果是这样,有没有办法追踪到列级别?

database multithreading entity-framework dbcontext change-tracking
1个回答
0
投票

找到这个问题的解决方案,

第一个处理调度状态的主线程可以有

    _dbContext.Entry(mapping).Property(x => x.Scheduled).IsModified = true;

代替

    _dbContext.Entry(mapping).State = EntityState.Modified;

正在操纵锁状态的第二个周期性线程可以有

    _dbContext.Entry(mapping).Property(x => x.Lock).IsModified = true;

代替

    _dbContext.Entry(mapping).State = EntityState.Modified;

这样,我们可以强制 ChangeTracker 不考虑在 SaveChanges 之前可能已经进行的其他更改。

© www.soinside.com 2019 - 2024. All rights reserved.