EF не может вставить объект, поскольку значение ключа для {'Id'} уже отслеживается
Я пытаюсь написать несколько тестов вокруг моего кода Entity Framework, и как часть изоляции логики я вставляю модель в базу данных следующим образом:
_context.Database.ExecuteSqlInterpolated(
$@"INSERT INTO MyModel(Id, Name, PostTown)
VALUES({Id}, {myModel.Name}, {myModel.PostTown});");
У меня есть несколько тестов, основанных на чтении этого объекта с использованием_contest.Set<MyModel>().Find()
что все работает как положено.
Сейчас я пытаюсь написать тест, чтобы убедиться, что мои методы обновления работают, тест выглядит примерно так:
MyModel myModel = new Model("AName", "ATown");
_context.Database.ExecuteSqlInterpolated(
$@"INSERT INTO MyModel(Id, Name, PostTown)
VALUES({myModel.Id}, {myModel..Name}, {intermediary.PostTown});");
...
_context.Set<MyModel>.Update(myModel);
await _context.SaveChangesAsync();
Однако обновление завершается с ошибкой:
Экземпляр объекта типа "MyModel" не может быть отслежен, поскольку уже отслеживается другой экземпляр с таким же значением ключа для {'Id'}. При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с заданным значением ключа. Рассмотрите возможность использования DbContextOptionsBuilder.EnableSensitiveDataLogging для просмотра конфликтующих значений ключей.
Нужно ли мне что-то делать после вставки SQL, чтобы EF распознал сущность?