我在后台工作人员中所做的更新不会出现在数据库中
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
并保存更改,这要归功于它。谢谢你的回答。
我在项目中有如下两个实体,我可以在服务中更新这些实体。
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
并保存更改,这要归功于它。谢谢你的回答。