Ho problemi con rilevando i cambiamenti di una proprietà di navigazione:Entity Framework non rileverà i cambiamenti di proprietà di navigazione
Il mio modello di prova si presenta così:
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; }
}
che ho creato e salvato un oggetto di tipo Persona con entrambe le proprietà Nome e Indirizzo assegnate. Il mio problema è che se recupero l'oggetto Person dal database e cambio la proprietà Address (ad esempio Null), allora l'e.f. non rileva il cambiamento! Il mio codice è questo:
using (var ctx = new EFContext())
{
Person p = ctx.People.First();
//p.Address IS NOT NULL!
p.Address = null;
var entry = ctx.Entry(p);
}
Perché entry.State
Invariato?
Modifica: Se chiamo SaveChanges, il record viene salvato correttamente (l'indirizzo diventa null)!
Edit 2: ho creato la proprietà chiave esterna come suggerito billy e se io ispezionare l'oggetto Person in Visual Studio viene modificato lo Stato .. se non mi fermo con il debugger ispezionare valori dell'oggetto i lo stato è invariato!
Modifica 3: Caricamento dell'oggetto Person utilizzando ctx.People.Include (x => x.Address) .First(); risolve il problema C'è un modo per evitare di chiamare Includi e continuare a modificare la proprietà Address invece di quella AddressId?
Cosa succede se chiami ctx.DetectChanges()? – Maarten
Niente. Il risultato è lo stesso!! – Mones