Tengo problemas con la detección de cambios de una propiedad de navegación:Entity Framework no detectará los cambios de las propiedades de navegación
Mi modelo de prueba tiene el siguiente aspecto:
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; }
}
que he creado y guardado un objeto de tipo Persona con propiedades de Nombre y Dirección asignadas. Mi problema es que si recupero el objeto Persona de la base de datos y cambio la propiedad Dirección (por ejemplo, a Nulo), entonces la e.f. no detecta el cambio! Mi código es la siguiente:
using (var ctx = new EFContext())
{
Person p = ctx.People.First();
//p.Address IS NOT NULL!
p.Address = null;
var entry = ctx.Entry(p);
}
¿Por qué es entry.State
Sin cambios?
Edit: Si llamo a SaveChanges, el registro se guarda correctamente (¡la dirección se vuelve nula)!
Edición 2: He creado la propiedad de clave externa como sugirió Billy y si inspecciono el objeto Persona en el estudio visual del estado se modifica .. si no se detienen con el depurador inspeccionar los valores del objeto de las el estado no ha cambiado!
Editar 3: Cargando el objeto Persona usando ctx.People.Include (x => x.Address) .First(); resuelve el problema ¿Hay alguna forma de evitar llamar a Include y continuar modificando la propiedad Address en lugar de AddressId?
¿Qué ocurre si llama a ctx.DetectChanges()? – Maarten
Nada. ¡¡El resultado es el mismo!! – Mones