Обновление свойства навигации Entity Framework

Сначала я использую Entity Framework 6 с SQLite и кодом. У меня проблема с обновлением объектов.

У меня есть объект "Запись"

class Record {

  public long Id;
  public long StatusId

  public virtual Statut Status;
}

И так объект "Статус".

Я создаю объект записи, как это

var newRecord = context.Records.Create();

Хотя я не добавил его в контекст, свойство Status имеет значение null.

context.Records.Add(newRecord);

Теперь у меня есть объект Status в свойстве Status Status (объект status с id = 0).

Но если я изменю StatusId, например, на 1 (этот идентификатор статуса существует), свойство Status не будет обновлено.

Entity Framework не должен обнаруживать такого рода изменения с помощью динамических прокси?

Спасибо,

1 ответ

Решение

Наблюдаемое вами поведение вызвано механизмом исправления отношений Entity Framework, процессом, который запускается многими методами EF и который обеспечивает согласованность значений и ссылок внешнего ключа (среди прочих).

Исправление отношений вызывается довольно большим количеством методов, но DbSet.Create() не один из них. Итак, вот что происходит:

var newRecord = context.Records.Create();

Новый Record создан, имея StatusId = 0. Нет исправления отношений.

context.Records.Add(newRecord);

Новая запись прикреплена к контексту. Теперь EF выполняет исправление отношений. Если вы будете следить за SQL, вы увидите, что Status запись извлекается из базы данных.

newRecord.StatusId = 1;

Метод EF не выполняется: нет исправления отношений, Status объект все еще один с Id = 0

Что вы можете сделать сейчас, чтобы получить право Status записать в newRecord либо выполнить один из методов, которые вызывают исправление отношений, либо вызвать context.ChangeTracker.DetectChanges(),

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