У меня сложилось впечатление, что, поскольку вы вызываете функцию _dataContext()
, а не вызываете защищенный экземпляр просто _dataContext, вы, вероятно, создаете новый контекст в методах get и save.
Так как методы get и save используют отдельные DbContexts
, поэтому, когда вы existing.Items = model.Items;
используете элементы, которые прикреплены к отдельному контексту.
Существует множество способов решить эту проблему. Но лично я бы просто создал защищенные методы, которые принимают dbContext, так что вам не нужно беспокоиться о присоединении сущностей к контексту.
protected BuyGroup GetImplementation(MyDbContext context, int id)
{
return await context.BuyGroups.FirstOrDefaultAsync(x => x.Id == id);
}
Тогда в вашем методе сохранения вы можете просто вызвать вместо этого:
var existing = await this.GetImplementation(dc, model.Id);
Редактировать для редактирования
Вы устанавливаете новый элемент как измененный вместо добавленного
existing.Items.Add(new Item{ .....}):
//You shouldn't do this for added items
//dc.ByGroups.Entry(existing).State = EntityState.Modified;