EF6 - come tenere traccia di cosa è cambiato quando gli oggetti sono mappati?

0

In un'applicazione EF6 DB-first, abbiamo un livello di accesso ai dati che gestisce tutte le interazioni con EF.

Gli oggetti estratti dal contesto sono classi C # generate da EF, che vengono quindi mappati su POCO equivalenti nel livello aziendale. Questo è un approccio suggerito comunemente in quanto disaccoppia i livelli.

Quindi mentre l'applicazione è in esecuzione, alcuni oggetti nel livello aziendale vengono modificati (alcuni nuovi possono essere aggiunti anche, altri eliminati). Quando le modifiche devono essere salvate nel DB, gli oggetti vengono ricondotti al livello aziendale. Il problema è quando EF riceve questi oggetti, non ha idea di quali entità siano cambiate e quali no.

Qual è un buon modo per avvicinarsi a questo? (dato che centinaia o migliaia di oggetti possono o non possono essere cambiati)

Ho visto altri progetti risolvere questo problema tenendo traccia delle modifiche negli elenchi: NewObjects, UpdatedObjects, DeletedObjects . Il problema ovvio qui è che ogni volta che qualcosa cambia, gli sviluppatori devono ricordare di aggiornare l'elenco appropriato. Questo finisce con un sacco di confusione extra, ed è molto facile fare un errore.

    
posta FBryant87 03.08.2017 - 14:03
fonte

1 risposta

1

Entity Framework ha i suoi meccanismi di tracciamento delle modifiche. L'aggiornamento di un'entità EF potrebbe essere semplice come questa (se utilizzi AutoMapper ):

var entity = context.Entities.First(e => e.Id == viewmodel.Id); // fetch the entity
Mapper.Map(viewmodel, entity); // Use automapper to update entity from viewmodel
context.SaveChanges();
    
risposta data 03.08.2017 - 18:23
fonte

Leggi altre domande sui tag