问题描述
我在项目中有两个实体,如下所示,我可以在服务中更新这些实体。
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。
在下面,您可以看到保存期间发生的异常以及我的实体的内容。
我认为我缺少一些东西,您能帮我吗?
解决方法
根据我在here中的代码所能理解的,并根据documentation和this 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
并保存更改。谢谢您的回答。