问题描述
我使用的是 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 (将#修改为@)