如何解决如何添加实体的状态但调用 CallTracker.HasChanges() 返回 false?
我使用的是 EF Core 5.0。
我有一个名为 JobApplicationManager 的类,它拥有 JobApplications 的多个()。
modelBuilder.Entity<JobApplicationManager>().OwnsMany(s => s.JobApplicationCategories,a =>
{
a.Property<DateTime>("CreatedDate");
a.Property<DateTime>("UpdatedDate");
a.ToTable("JobApplicationManagerCategories");
});
modelBuilder.Entity<JobApplication>().OwnsMany(s => s.JobApplicationCategories,a =>
{
a.Property<DateTime>("CreatedDate");
a.Property<DateTime>("UpdatedDate");
a.ToTable("JobApplicationCategories");
});
当前状态:DB中有一个JobApplicationManager,一个JobApplication。 操作:我将另一个 JobApplication 添加到 JobApplicationManager。
在我的 DBContext.SaveChangesAsync() 中,我调用 ChangeTracker.Entries(),以下是实体:
如您所见,第一个条目是状态为“已添加”的 JobApplication。
同样在这个 DBContect 中你可以看到 JobApplicationManager 有两个 JobApplications:
下一步我可以 ChangeTracker.HasChanges() 返回 false,因此 base.SaveChangesAsync() 返回 0 个写入的实体。
我不知道该怎么办。
这是创建我的实体并调用我的存储库的代码:
var mgr = await AMRepository.GetJobApplicationManagerAsync(command.JobApplicationManagerID);
var newJobApplication = mgr.AddJobApplication(command.JobDescriptionURL,command.JobTitle,command.FileName,command.CompanyName,command.GeographicLocation,command.RecruiterName,command.JobApplicationCategories);
// Update the Repository
AMRepository.Update(mgr);
commandResult = await AMRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken);
这是我存储库中的代码:
public void Update(JobApplicationManager applicationManager)
{
try
{
AppManagerContext.Entry(applicationManager).State = EntityState.Modified;
}
这是我的 DBContext 中 SaveEntitiesAsync() 的代码:
public async Task<bool> SaveEntitiesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
var changesFlag1 = ChangeTracker.HasChanges();
// Dont save the enumeration Value Object types
try
{
var enumerationEntries = ChangeTracker.Entries()
.Where(x => EnumerationTypes.Contains(x.Entity.GetType()));
foreach (var enumerationEntry in enumerationEntries)
{
enumerationEntry.State = EntityState.Unchanged;
}
}
catch (Exception exc)
{
Console.WriteLine(exc.ToString());
}
UpdateShadowProperties();
var numberOfStateEntitiesWritten = 0;
try
{
numberOfStateEntitiesWritten = await base.SaveChangesAsync(cancellationToken);
}
catch (DbUpdateException exc)
{
Console.WriteLine(exc.ToString());
}
if (numberOfStateEntitiesWritten == 0)
{
return false;
}
return true;
}
这是来自 Repository 的 GetJobApplicationManagersAsync() 代码:
public async Task<IEnumerable<JobApplicationManager>> GetJobApplicationManagersAsync() => await AppManagerContext.JobApplicationManagers.ToListAsync();
在 mgr.AddApplication() 中,我所做的就是将 POCO 类添加到 mgr。没有与基础设施相关的活动(即使用 DBContext)>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。