我在后台工作人员中所做的更新不会出现在数据库中

Updates I made within the background worker do not appear in the database

我在项目中有如下两个实体,我可以在服务中更新这些实体。

UpdateAsync 服务:

UpdateAsync 方法按预期工作。

但是,虽然我写了类似的代码,但是我在后台worker中所做的更改只影响了Monitoring。总之,MonitoringStep实体在后台worker中没有更新。

下面你可以看到我为后台工作者创建的方法的代码:

        var monitorRepository = workerContext.ServiceProvider.GetService<IMonitorRepository>();

        var monitor = await monitorRepository.GetAsync(Guid.Parse("E3076832-D653-79BC-002B-39F8403C4EB0"));

        monitor.SetName("Whosebug-example");
        monitor.MonitorStep.Url = "http://whosebug.com/";
        
        await monitorRepository.UpdateAsync(monitor, true);

因此,Monitortable中的Name属性更新了,但是MonitorSteptable中的Url没有更新。

下面可以看到保存时出现的异常和我实体的内容。

我想我缺少了什么,你能帮我吗?

据我从您在 here and according to the documentation and this website 中的代码中了解到的情况,有两个问题,一个; MonitorStep class:

中缺少 属性
    public Monitor Monitor { get; set; }

其次,由于您正在映射 one-to-one 关系,因此您的映射缺少对 one-to-one table/class(监视器)的引用:

b.HasOne(n => n.MonitorStep).WithOne(m => m.Monitor).HasForeignKey<MonitorStep>(x => x.MonitorId).IsRequired();

我发现了问题。事实上,问题出在 UpdateAsync 方法中的 DbContext.Attach(entity); 行。在保存更改完成之前,此行不保存更改。我在做 AutoSave,实际上,我希望那部分能正常工作,但它没有工作。经过长时间的努力,我能够创建一个 UnitOfWork 并保存更改,这要归功于它。谢谢你的回答。