c# - EFCore/C# - 集合已修改 -> 操作可能无法执行
问题描述
在for
循环内没有任何地方我正在更改weeklyReportsList
or weeklyReport1.DailyReports
,所以我不明白错误来自哪里,我似乎无法找到可以修改 Collection 的位置
代码
foreach (var weeklyReport1 in weeklyReportsList)
{
foreach(var dailyReport in weeklyReport1.DailyReports)
{
_context.Attach(dailyReport);
User user = GetDataUser(Convert.ToInt32(User.FindFirst(ClaimTypes.PrimarySid).Value));
if (user == null)
{
_toastNotification.AddErrorToastMessage("Utilizador não encontrado.");
OnGet();
return Page();
}
else
{
dailyReport.UserCreator = user;
}
/*dailyReport.States = GetDataStates(state);
_context.Entry(dailyReport).Reference(dr => dr.States).IsModified = true;*/
dailyReport.EstimatedDate = nextDate;
_context.Entry(dailyReport).Property(dr => dr.EstimatedDate).IsModified = true;
dailyReport.WeeklyReportId = nextWeeklyReport.Id;
dailyReport.WeekDay = GetWeekDayName((DateTime)dailyReport.EstimatedDate);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException e)
{
_toastNotification.AddErrorToastMessage("Falha ao editar Registo");
Console.Write(e);
return RedirectToPage("Index");
}
_context.Entry(dailyReport).State = EntityState.Detached;
await CreateLog(dailyReport.Id);
}
}
public async Task<IActionResult> CreateLog(int id)
{
DailyReport editedDailyReport = GetDailyReport(id);
User user = GetDataUser(Convert.ToInt32(User.FindFirst(ClaimTypes.PrimarySid).Value));
LogReports logReports = new LogReports(editedDailyReport, "Edição Registo Atrasado", user.Id);
_context.LogReportsReception.Add(logReports);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException e)
{
Console.Write(e);
_toastNotification.AddWarningToastMessage("Log Registo não criado");
}
return null;
}
PS:所有其他功能(Get...()
)仅与数据检索相关。那里没有任何归属
解决方案
您使用 foreach 迭代的集合在迭代期间可能不会被修改。因此,您不能以这种方式修改元素。但是,您可以循环浏览该集合的副本。例如循环实例化时的 Collection.ToList()。这将允许您在循环中修改您的实际集合,同时不更改集合的“副本”。您可以通过更改来验证这一点:
foreach(var dailyReport in weeklyReport1.DailyReports)
至
foreach(var dailyReport in weeklyReport1.DailyReports.ToList())
推荐阅读
- kql - Kusto.Explorer 需要辅助帐户才能访问 azure Log Analytics 工作区
- c++ - C++ 二次同余生成器
- windows - 如何使用“IF”语句确定要添加到 VMDK 的可用磁盘空间量?
- docusignapi - 嵌入式签名用户界面
- tree - 在具有特定序列的二叉树中查找路径
- typescript - 类方法的数组中的动态类型
- node.js - 如何在 NodeJS 中将文件从 S3 存储桶上传到服务器(SFTP)?
- r - R工作室的直方图
- python - 如何在 Python 中写入临时文件后更改其模式
- canoe - 我可以将 CAN 日志文件播放到 V2X 设备上的 CAN 输入吗?