Entity Framework не будет обнаруживать изменения свойств навигации

У меня возникли проблемы с обнаружением изменений свойства навигации:

Моя тестовая модель выглядит так:

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 (ex. в Null ), то э.ф. не обнаруживает изменения! Мой код такой:

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:Я создал свойство внешнего ключа, как предложил Билли, и если я проверю объект Person в визуальной студии, состояние будет изменено. Если я не остановлюсь на отладчике, проверяющем значения объекта, состояние не изменится!

Редактировать 3:Загрузка объекта Person с помощью ctx.People.Include (x => x.Address ).First (); решает проблему.Есть ли способ избежать вызова Include и продолжать изменять свойство Address вместо свойства AddressId?

15
задан Mones 26 July 2012 в 14:12
поделиться