我在后台工作程序中进行的更新未显示在数据库中

问题描述

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

enter image description here

enter image description here

UpdateAsync服务:

enter image description here

UpdateAsync方法可以正常工作。

但是,尽管我编写了类似的代码,但是我在后台工作程序中所做的更改仅影响监视。简而言之,MonitoringStep实体不会在后台工作程序中更新。

下面您可以看到我为后台工作人员创建的方法代码

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

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

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

结果,将更新Monitor表中的Name属性,但不会更新MonitorStep表中的Url。

在下面,您可以看到保存期间发生的异常以及我的实体的内容

enter image description here

enter image description here

我认为我缺少一些东西,您能帮我吗?

解决方法

根据我在here中的代码所能理解的,并根据documentationthis website,有两个问题,一个是问题。 MonitorStep类中缺少属性:

    public Monitor Monitor { get; set; }

第二,由于您正在映射一对一关系,因此您的映射缺少对一对一表/类(监视器)的引用:

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

我发现了问题。实际上,问题出在DbContext.Attach(entity);方法的UpdateAsync行中。在完成“保存更改”之前,该行不保存更改。我当时在做AutoSave,实际上,我希望该部分可以正常工作,但是没有工作。经过长时间的努力,我得以创建一个UnitOfWork并保存更改。谢谢您的回答。