ОБНОВЛЕНИЕ: Только что подтвердил, что это может быть причиной. И создал новый совет в моей серии советов для объяснения.
Я могу вспомнить одну возможную причину. Есть ли связь между schedule.Timetables
один ко многим? То есть Можно ли назначить расписание только одному расписанию за раз?
Если это так, то это невозможно:
foreach (var t in schedule.Timetables) {
sh.Timetables.Add(t);
}
Потому что, когда вы добавляете 't' в другое расписание, оно автоматически удаляется из старой коллекции schedule.Timetables
, что, конечно, изменяет перечисляемую коллекцию, то есть нет-нет.
Если это так, решение состоит в том, чтобы просто сделать что-то вроде этого:
var timetables = schedule.Timetables.ToArray();
foreach (var t in timetables) {
sh.Timetables.Add(t);
}
Здесь вы перечисляете коллекцию до того, как начнете ее изменять.