EFCore/C#-已修改集合->;操作可能无法执行
我有以下循环。第一次迭代成功后,我会得到以下错误: 在EFCore/C#-已修改集合->;操作可能无法执行,c#,entity-framework-core,C#,Entity Framework Core,我有以下循环。第一次迭代成功后,我会得到以下错误: 在for循环中的任何位置,我都没有更改weeklyReportsList或weeklyReport1.dailReports,因此我不知道错误来自何处,我似乎找不到可能修改集合的位置 代码 foreach (var weeklyReport1 in weeklyReportsList) { foreach(var dailyReport in weeklyReport1.DailyRep
for
循环中的任何位置,我都没有更改weeklyReportsList
或weeklyReport1.dailReports
,因此我不知道错误来自何处,我似乎找不到可能修改集合的位置
代码
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;
}
foreach(weeklyReportsList中的变量weeklyReport1)
{
foreach(在weeklyReport1.DailReports中的var DailReport)
{
_上下文。附加(DailReport);
User User=GetDataUser(Convert.ToInt32(User.FindFirst(ClaimTypes.PrimarySid.Value));
if(user==null)
{
_toastNotification.AddErrorToastMessage(“Utilizador não encontrado.”);
OnGet();
返回页();
}
其他的
{
dailyReport.UserCreator=用户;
}
/*DailReport.States=GetDataStates(状态);
_context.Entry(dailyReport).Reference(dr=>dr.States).IsModified=true*/
DailReport.EstimatedDate=下一个日期;
_context.Entry(dailyReport).Property(dr=>dr.EstimatedDate).IsModified=true;
dailyReport.WeeklyReportId=nextWeeklyReport.Id;
dailyReport.WeekDay=GetWeekDayName((DateTime)dailyReport.EstimatedDate);
尝试
{
wait_context.SaveChangesAsync();
}
捕获(DbUpdateException e)
{
_toastNotification.AddErrorToastMessage(“Falha ao编辑注册表”);
控制台。写入(e);
返回至Topage(“索引”);
}
_context.Entry(dailyReport.State=EntityState.Distached;
等待CreateLog(dailyReport.Id);
}
}
公共异步任务CreateLog(int-id)
{
DailyReport editedDailyReport=GetDailyReport(id);
User User=GetDataUser(Convert.ToInt32(User.FindFirst(ClaimTypes.PrimarySid.Value));
LogReports LogReports=新日志报告(editedDailyReport,“Edição Registo Atrasado”,user.Id);
_context.logReports异常.Add(logReports);
尝试
{
wait_context.SaveChangesAsync();
}
捕获(DbUpdateException e)
{
控制台。写入(e);
_toastNotification.AddWarningToastMessage(“日志注册não criado”);
}
返回null;
}
PS:所有其他函数(
Get…()
)仅与数据检索相关。没有任何属性在迭代过程中,不能修改使用foreach迭代的集合。
因此,不能以这种方式修改图元。
但是,您可以循环浏览集合的副本。例如,循环实例化处的实例Collection.ToList()。这将允许您修改循环中的实际集合,同时不更改集合的“副本”。
您可以通过更改以下内容来验证这一点:
foreach(var dailyReport in weeklyReport1.DailyReports)
到
这一切如期而至。不过,我不知道我是如何试图改变收藏的,因为在任何地方我都没有改变
weeklyReport1
或weeklyReport1.DailyReports
。这是我在foreach循环之前定义的一个变量,我再也不调用它了。。。
foreach(var dailyReport in weeklyReport1.DailyReports.ToList())