. После успешного сохранения изменений состояние возвращается к
Unchanged
.
Обновление отслеживаемых сущностей
Обновление одиночной записи очень похоже на добавление одной записи. Вам понадобится загрузить запись из базы данных, внести в нее какие-то изменения и вызвать метод
SaveChanges
. Обратите внимание, что вам не нужно вызывать
Update/UpdateRange
на экземпляре
DbSet<T>
, поскольку сущности отслеживаются.
Представленный ниже тест обновляет только одну запись, но при обновлении и сохранении множества отслеживаемых сущностей процесс будет таким же:
[Fact]
public void ShouldUpdateACar
{
ExecuteInASharedTransaction(RunTheTest);
void RunTheTest(IDbContextTransaction trans)
{
var car = Context.Cars.First(c => c.Id == 1);
Assert.Equal("Black",car.Color);
car.Color = "White";
// Вызывать Update не нужно, т.к. сущность отслеживается.
// Context.Cars.Update(car);
Context.SaveChanges;
Assert.Equal("White", car.Color);
var context2 = TestHelpers.GetSecondContext(Context, trans);
var car2 = context2.Cars.First(c => c.Id == 1);
Assert.Equal("White", car2.Color);
}
}
В предыдущем коде задействована транзакция, совместно используемая двумя экземплярами
ApplicationDbContext
. Это должно обеспечить изоляцию между контекстом, выполняющим тест, и контекстом, проверяющим результат теста. Вот выполняемый оператор SQL:
. Проверка параллелизма будет раскрыта очень скоро .
Обновление неотслеживаемых сущностей
Неотслеживаемые сущности тоже можно использовать для обновления записей базы данных. Процесс аналогичен обновлению отслеживаемых сущностей за исключением того, что сущность создается в коде (и не запрашивается), а исполняющую среду EF Core потребуется уведомить о том, что сущность уже должна существовать в базе данных и нуждается в обновлении.
После создания экземпляра сущности есть два способа уведомления EF Core о том, что эту сущность необходимо обработать как обновление. Первый способ предусматривает вызов метода
Update
на экземпляре
DbSet<T>
, который устанавливает состояние в
Modified
:
context2.Cars.Update(updatedCar);
Второй способ связан с применением экземпляра контекста и метода