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 распознал сущность?

0 ответов

Другие вопросы по тегам