У моего контекста БД фреймворка сущностей это:
public DbSet<TableCell> TableCells { get; set; }
Класс бизнес-логики ячейки таблицы имеет эту функцию для добавления:
public void addTableCell(TableCell tc)
{
context.TableCells.Add(tc);
context.SaveChanges();
}
Ячейка сущности это:
[Table("TableCell")]
public class TableCell
{
public TableCell()
{
this.TableElements = new HashSet<TableElement>();
this.SomeObjects = new HashSet<SomeObject>();
}
[Key]
public int PK_TableCellID { get; set; }
[Required]
public int Row { get; set; }
[Required]
public int Column { get; set; }
[Required]
[ForeignKey("Table")]
public int FK_TableID { get; set; }
public ICollection<TableElement> TableElements { get; set; }
public ICollection<SomeObject> SomeObjects { get; set; }
public Table Table{ get; set; }
}
Я хочу создать таблицу, пользователь выберет размер таблицы, и я создам ячейки для решения пользователей. Каждая ячейка будет содержать несколько элементов. Для этого у меня есть такой метод:
public void createTableWithCells()
{
Table table = new Table
{
//row number added here with the user input
//column number added here with the user input
//I don't add any cell object here.
};
TableLogic.addTable(table);
for (int row = 0; row < table.rowNumber; row++)
{
for (int column = 0; column < table.columnNumber; column++)
{
TableCell cell = new TableCell
{
//cell elements, properties etc.
SomeObjects = someObjectList,
Table = table
};
cellLogic.addTableCell(cell);
}
}
}
Проблема в том, что для циклов добавляется только одна ячейка. После первой итерации, во второй итерации, когда дело доходит до строки
cellLogic.addTableCell(cell);
Я получил исключение из метода add cellLogic. Здесь:
context.TableCells.Add(tc);
Исключение говорит: «Коллекция была изменена; операция перечисления может не выполняться. ”