簡體   English   中英

我在后台工作人員中所做的更新沒有出現在數據庫中

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

我在項目中有兩個實體,如下所示,我可以在服務中更新這些實體。

在此處輸入圖片說明

在此處輸入圖片說明

UpdateAsync服務:

在此處輸入圖片說明

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 未更新。

下面你可以看到保存時發生的異常和我的實體的內容。

在此處輸入圖片說明

在此處輸入圖片說明

我想我缺少一些東西,你能幫我嗎?

根據我在這里的代碼以及文檔本網站的理解,有兩個問題,一個; 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並通過它保存更改。 謝謝您的回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM