Contrassegno della proprietà di navigazione come modificata in Entity Framework 7

entity-framework-core

Domanda

Possiedo un DbContext DbContext con il rilevamento delle modifiche disabilitato perché desidero contrassegnare esplicitamente tutte le modifiche:

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

Funziona esattamente come voglio.

Tuttavia, questo non funziona quando un riferimento (proprietà di navigazione) è stato aggiornato.

Ad esempio, supponiamo che la mia entità abbia due proprietà: ParentId e Parent dove ParentId è una chiave esterna e Parent è il riferimento all'entità padre.

chiamata

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

non funziona e genera ModelItemNotFoundException perché Parent non è una proprietà dell'entità in termini di EF (è invece una navigazione).

In EF6, questo potrebbe essere fatto come segue:

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

IN EF7, non esiste tale funzione. Posso arrivare all'oggetto INavigation con

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

ma non può vedere alcun modo per contrassegnarlo come modificato.

Quindi, come dovrei farlo?

Nota: so che l'impostazione di ParentId funzionerebbe, ma non è adatta a me perché l'entità referenziata non ha ancora un ID poiché è stata appena creata e riceverà il suo ID dal database una volta salvata. Quindi, ho bisogno di impostarlo attraverso il Parent riferimento.

Modificare:

La nota sopra era vera per EF6 ma non è più valida per EF7 di cui non ero a conoscenza. Pertanto, la soluzione è esattamente come descritto nella nota e nella risposta di seguito.

Risposta accettata

Wow, sembra che quando una nuova entità è collegata a DbContext , ottenga effettivamente l'ID (-1 nel mio caso). Quindi, posso impostare ParentId anche quando l'entità di destinazione è nuova e non è stata ancora aggiunta al database.

Mi chiedo se ci siano dei controlli che il nuovo ID sia unico (potrebbe esserci già una voce con ID -1 nel database).




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché