Обновление свойства навигации 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()
,