Этот вопрос является распространенным, но я все еще не могу понять, как правильно обновить связанный объект?
У меня есть следующий код:
public async Task<bool> UpdateStepAssignedToLevelAsync(Step step, Guid levelId, int priority = -1)
{
var item = await this._context.StepLevels
.Include(sl => sl.Step)
.FirstOrDefaultAsync(x => x.StepId == step.Id && x.LevelId == levelId);
if (item == null)
{
return false;
}
//this._context.Entry(item).State = EntityState.Detached;
if (priority > -1)
{
item.Priority = priority;
}
item.Step = step;
//this._context.StepLevels.Update(item);
var rows = await this._context.SaveChangesAsync();
return rows > 0;
}
Когда он запускается, яполучаю следующую ошибку:
InvalidOperationException: The instance of entity type 'Step' cannot be tracked because another instance with the key value '{Id: 35290c18-5b0a-46a5-8f59-8888cf548df5}' is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached.
Как я понимаю, сущность отслеживается с момента запроса выбора в начале метода.Хорошо, но когда я отсоединяю сущность и вызываю метод Update (см. Закомментированные строки), сущность Step не изменяется.Но StepLevel делает: приоритет меняется.Когда я пытаюсь вызвать просто Обновить, EF пытается вставить новый Шаг вместо обновления существующего.
Итак, не могли бы вы посоветовать мне, что лучше всего использовать здесь?
Заранее большое спасибо!