O Entity Framework não detectará alterações nas propriedades de navegação
Estou com problemas para detectar alterações de uma propriedade de navegação:
Meu modelo de teste é assim:
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; }
}
Eu criei e salvei um objeto do tipo Person com as propriedades Name e Address atribuídas. Meu problema é que, se eu buscar o objeto Person de volta do banco de dados e alterar a propriedade Address (ex. Para Null), então o e.f. não detecta a mudança! Meu código é este:
using (var ctx = new EFContext())
{
Person p = ctx.People.First();
//p.Address IS NOT NULL!
p.Address = null;
var entry = ctx.Entry(p);
}
Por que éentry.State
Inalterado ?
Editar: Se eu chamar o SaveChanges, o registro é salvo corretamente (o endereço fica nulo)!
Editar 2: Eu criei a propriedade de chave estrangeira como sugerido e se eu inspecionar o objeto Person no Visual Studio, o estado é modificado. Se eu não parar com o depurador inspecionando os valores do objeto, o estado é Unchanged!
Editar 3: Carregando o objeto Person usando ctx.People.Include (x => x.Address) .First (); resolve o problema. Existe uma maneira de evitar a chamada Incluir e continuar a modificar a propriedade de endereço em vez da propriedade AddressId?