У меня возникают проблемы с обнаружением изменений свойства навигации:
Моя модель тестирования выглядит так:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
}
Я создал и сохранил объект типа Person с назначенными свойствами Name и Address. Моя проблема в том, что если я извлечу объект Person из базы данных, и я изменил свойство Address (например, на Null), то e.f. не обнаруживает изменения! Мой код:
using (var ctx = new EFContext())
{
Person p = ctx.People.First();
//p.Address IS NOT NULL!
p.Address = null;
var entry = ctx.Entry(p);
}
Почему entry.State
Без изменений?
Изменить: Если я вызову SaveChanges, запись будет сохранена правильно (адрес станет нулевым)!
Изменить 2:. Я создал свойство внешнего ключа, как предложил billy, и если я проверю объект Person в визуальной студии, состояние будет изменено. Если я не остановлюсь с проверкой отладчика значения объекта не изменяются!
Изменить 3: Загрузка объекта Person с помощью ctx.People.Include(x = > x.Address).First(); решает проблему. Есть ли способ избежать вызова Include и продолжить изменение свойства Address вместо AddressId?